2012-02-14 2 views
6

Tôi đang sử dụng Backbone.JS với Mustache, vì vậy để hiển thị các tempalt của tôi, tôi gọi MyModel.toJSON(). Điều này khiến tôi chỉ có quyền truy cập vào các thuộc tính. Làm cách nào tôi có thể có một số thuộc tính luôn được tính toán?Backbone.JS xử lý các mô hình với các thuộc tính được tính như thế nào

Tôi đã xem tài liệu Backbone.JS và nó có thể hoạt động để ghi đè xác thực() nhưng điều này có vẻ như là hack và có thể dẫn đến vòng lặp vô hạn.

Tôi cũng đã thử tạo thuộc tính là hàm thay vì giá trị, nhưng Mustache không nhận được giá trị khi tôi cố gắng sử dụng nó.

+0

Ghi đè lênJSON: yêu cầu gọi hàm gốc làJSON, sau đó thêm thuộc tính đã tính của bạn vào kết quả. – jdigital

Trả lời

3

Đây là cách tôi hiện đang thực hiện. Tôi thực hiện các phép tính khi khởi tạo một mô hình và thêm trình nghe cho các thay đổi đối với mô hình để tính toán lại tự động.

... 
initialize: function() { 
    console.log('Lead:initialize'); 
    _.bindAll(this, 'validate', 'calculate'); 
    this.bind('change', this.setCalculations, this); 
    this.setCalculations(); 
}, 
setCalculations: function() { 
    this.set({ calculations: this.calculate() }, { silent: true }); 
}, 
calculate: function() { 
    // do the calculations and return 
}, 
... 
+0

Bạn đã làm điều gì đó khác biệt để ngăn không cho nó tạo ra một vòng lặp vô hạn? Tôi đã thử điều này và tôi có thể tạo ra một mô hình, nhưng sau đó lần đầu tiên tôi đặt bất cứ thứ gì trên đó tôi nhận được một vòng lặp vô hạn. –

+0

Ồ! Lấy làm tiếc! Tôi đã quên ', {silent: true}' trong 'setCalculations' – abraham

0

Tôi không biết nếu tôi hiểu câu hỏi một cách chính xác, nhưng:

Bạn Không thể vượt qua các mô hình thực tế để Ria mép? ví dụ: khi bạn hiển thị

render: ->  
rendered_content = @template({model: @model}) 
$(@.el).html rendered_content 
@ 

Bạn đang chuyển mô hình thực tế tới mẫu. Sau đó, bạn có một mẫu

<td class="quantity">   
    <input type="text" value="<%= model.get('quantity') %>" name="quantity" /> 
</td> 


<td> 
    <%= model.getTotalPrice() %> 
</td> 

Và trong mô hình bạn khai báo getTotalPrice()

getTotalPrice: -> 
    total_price = @get('price') * @get('quantity') 
    total_price + total_price * @get('tax_rate') 

Tôi thực sự không bao giờ vượt qua @ model.toJSON trong các mẫu của tôi, alawys mô hình thực tế.

+0

Điều đó không có tác dụng vì Mustache (http://mustache.github.com/) là cố ý ít logic hơn. Bạn có thể lấy các thuộc tính ngoài đối tượng nhưng bạn không thể gọi .get() –