2013-01-05 41 views

Trả lời

21

Khi bạn kết xuất mẫu Handlebars, bạn cần chuyển vào các thuộc tính của mô hình. Cách được khuyến nghị để thực hiện việc này là gọi số Model.toJSON, trả về một bản sao của mã băm attributes nội bộ của mô hình.

var template = Handlebars.compile(templateHtml); 
var rendered = template({ person: model.toJSON() }); 

Trong mẫu, bạn có thể truy cập ngữ cảnh theo tên thuộc tính.

<span>{{person.firstName}} {{person.lastName}}</span> 
+0

Got nó. Vì vậy, ý tưởng là để đưa JSON vào mẫu thay vì các mô hình Backbone. –

+3

@AkshayRawat, 'Model.toJSON' được đặt tên một chút hài hước, bởi vì những gì nó trả về nó không thực sự JSON, chỉ là một đối tượng javascript bình thường. Nếu bạn muốn JSON thực tế, bạn sẽ phải gọi 'JSON.stringify (model.toJSON())' - nhưng những gì Handlebars muốn là một đối tượng bình thường. – jevakallio

+0

Tên 'toJSON' không thực sự là lỗi của Backbone, tên được chỉ định bởi [' JSON.stringify'] (https://developer.mozilla.org/en-US/docs/JSON#toJSON() _method). –

6

Thật sự tôi đã rất nhiều nơi với .toJSON vì vậy tôi đã phát triển một sửa đổi tay lái để xử lý Models Backbone:

https://gist.github.com/4710958

Nó sẽ kiểm tra xem một giá trị thể hiện của Backbone. Mô hình và nếu nó là nó sẽ gọi phương thức .get().

Backbone.Model phải là toàn cầu để sử dụng.

{{ user.address.street }} 

sẽ được phân tích như sau:

user.get("adress").street 
+0

Điều này vẫn làm việc với HandleBars v1.3.0? Tôi đã đặt đoạn mã của bạn trong app.js nhưng nó dường như không làm gì cả. – ddewaele

+0

Xin lỗi, tôi không sử dụng Handlebars nữa nên tôi không biết. Bạn có thấy bất kỳ lỗi nào trên bảng điều khiển không? Nếu bạn làm thế, chúng ta có thể tiếp tục nói về nó tại https://gist.github.com/amatiasq/4710958 –

Các vấn đề liên quan