2011-12-28 22 views
6

Làm cách nào để biết thuộc tính nào của mô hình chế độ xem được thay đổi trong hàm kết xuất? (Trong hàm render, "e" là mô hình, nhưng tôi chỉ cần thuộc tính được thay đổi.) Tôi cần biết điều này để biết mẫu nào cần sử dụng. Hoặc là có một phương pháp để làm điều này?backbone.js Xem xác định thuộc tính nào của mô hình đang thay đổi

window.Person = Backbone.Model.extend({}); 

window.Njerzit = Backbone.Collection.extend({ 
    model: Person, 
    url: '/Home/Njerzit' 
}); 

window.PersonView = Backbone.View.extend({ 
    tagName: 'span', 

    initialize: function() { 
     _.bindAll(this, 'render'); 
     this.model.bind('change', this.render); 
    }, 

    render: function (e) { 
     //if model name is changed, I need to render another template 
     this.template = _.template($('#PersonTemplate').html()); 
     var renderContent = this.template(this.model.toJSON()); 
     $(this.el).html(renderContent); 
     return this; 
    } 
}); 
+0

cả câu trả lời dưới đây giải pháp đề nghị, nhưng cách đơn giản nhất đang sử dụng một sự kiện cụ thể hơn như thay đổi: attrName trong trường hợp của bạn thay đổi: Tên ... – Sander

Trả lời

14

Tôi tin rằng changedAttributes chức năng là những gì bạn đang tìm kiếm

changedAttributesmodel.changedAttributes ([thuộc tính])
Lấy một hash của các thuộc tính duy nhất của mô hình mà đã thay đổi . Tùy chọn, băm thuộc tính bên ngoài có thể được chuyển vào, trả về các thuộc tính trong băm đó khác với mô hình. Điều này có thể được sử dụng để tìm hình ảnh mà cần cập nhật các phần của một chế độ xem hoặc những cuộc gọi cần phải thực hiện để đồng bộ hóa các thay đổi với máy chủ.

hoặc để kiểm tra nếu một thuộc tính cụ thể đã thay đổi sử dụng các chức năng hasChanged

hasChangedmodel.hasChanged ([Thuộc tính])
đã mô hình đã thay đổi kể từ khi "thay đổi" sự kiện cuối cùng? Nếu một thuộc tính được chuyển, trả về true nếu thuộc tính cụ thể đó đã thay đổi.

var nameChanged = this.model.hasChanged("name");