2011-12-08 8 views
37

Tôi có một mẫu ngọc bích cho dự án node.js của mình. Tôi muốn gửi một đối tượng đến mẫu ngọc và chuyển nó đến một hàm bên trong trang (để hiển thị một cái gì đó).Mẫu ngọc, cách chuyển đối tượng cụ thể tới các trang?

Tôi chắc chắn tôi gửi những thứ ngay từ máy chủ như thế này

res.render(__dirname + '/pages/viz.jade', { 
    vizJson: newJson, 
}); 

trong các khách hàng tôi làm điều gì đó như thế này:

script 
    sunburst(#{vizJson}) 

Như vậy, bên trong một hàm kịch bản, tôi muốn gọi một hàm tạo ra hình ảnh của tôi với một số json mà tôi đã tạo ở phía máy chủ.

Vấn đề là khi kết xuất tôi có một cái gì đó như sunburst([Object object]). Tôi cũng đã cố gắng gửi phiên bản đã được xâu chuỗi của JSON nhưng khi tôi làm JSON.parse(#{vizJson}), nó than phiền như Unexpected token &.

Json tôi gửi luôn khác và có mức độ sâu khác nhau.

Có ai biết phải làm gì không?

Cảm ơn

Trả lời

72

Tôi hy vọng điều này sẽ giúp người khác. Tôi giải quyết nó như thế này:

script 
    sunburst(!{JSON.stringify(vizJson)}) 

Thông báo các !{...} gói phương pháp stringify.

+0

Nó đã giúp tôi! Cảm ơn –

+0

json của tôi trở lại như thế này: '" {\ "some_key \": ...} "'. Đây có thể là sản phẩm của cách tôi lấy đối tượng json gốc, nhưng trong ví dụ này, tôi đã bọc kết quả đầu ra trong một phương thức JSON.parse ("{\" some_key \ ": ...}") trong trang. Đối tượng dường như hoạt động tốt trong trình duyệt. – hellatan

+0

Điều này thật tuyệt vời. Cảm ơn nhiều! – detj

3

Để làm việc này, bạn cần phải xâu chuỗi trên máy chủ.

res.render(__dirname + '/pages/viz.jade', { 
    vizJson: JSON.stringify(newJson), 
}); 

Sau đó, như bạn đã đề cập, phân tích cú pháp JSON trên ứng dụng khách.

script 
    sunburst(JSON.parse(#{vizJson})) 

Hy vọng điều đó sẽ hữu ích!

+1

Bạn không cần phải gọi 'JSON.parse' trên máy khách vì mã đã nằm trong thẻ' script'. – fent

+1

Xin lỗi vì đã không hoạt động. Đó là một trong những điều tôi đã thử. Cảm ơn dù sao đi nữa, tôi đã tìm ra cách để làm điều đó. – Masiar

+0

Ah, bắt tốt. – btford

2

Rất kỳ quặc, đối với tôi giải pháp không liên quan đến cuộc gọi tới JSON.parse. Tôi xâu chuỗi đối tượng của mình trên máy chủ và chỉ sử dụng phương thức !{vizJson} và nhận đối tượng khách hàng của tôi.

mỗi tài liệu, unescaped chuỗi suy: http://jade-lang.com/reference/interpolation/

+2

Tôi đoán mọi thứ đã thay đổi trong 5 năm :) cảm ơn vì đã dành thời gian để đăng bài này! – Masiar

0

Về phía JS, bạn gửi lại

res.render(__dirname + '/pages/viz.jade', { 
    vizJson: JSON.stringify(newJson), 
}); 

Về phía HTML, tôi đã phát hiện ra rằng một cái gì đó như:

JSON.parse('!{vizJson}') 

hoạt động.