2011-12-28 48 views
6

如何知道渲染函數中視圖模型的哪個屬性發生了更改? (在渲染函數中,「e」是模型,但我只需要改變的屬性)。我需要知道這一點以知道使用哪個模板。還是有另一種方法來做到這一點?backbone.js查看確定模型的哪個屬性發生了變化

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

下面提供的解決方案兩個答案,但最簡單的一個正在使用一個更具體的事件,如更改:您的案例中的attrName更改:名稱... – Sander 2011-12-28 22:07:24

回答

14

我相信changedAttributes功能是你在找什麼

changedAttributesmodel.changedAttributes([屬性])
只檢索模型的屬性的哈希已更改。可選地, 可以傳入一個外部屬性散列,並返回該散列中與模型不同的屬性 。這可以用來計算出 應該更新視圖的哪些部分,或者調用 以便將更改同步到服務器。

,或者檢查是否有特定的屬性已經改變使用功能hasChanged

hasChangedmodel.hasChanged([屬性])
具有典型的自上次 「改變」 事件改變了嗎?如果傳遞了一個屬性,如果該特定屬性已更改,則返回true 。

var nameChanged = this.model.hasChanged("name"); 
相關問題