如何知道渲染函数中视图模型的哪个属性发生了变化? (在渲染函数中,“e”是模型,但我只需要更改的属性。)我需要知道这个以了解要使用的模板。或者还有另一种方法可以做到这一点吗?
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 :(得分:14)
我相信changedAttributes
功能正是您正在寻找的功能
<强> changedAttributesmodel.changedAttributes([属性])强>
仅检索已更改的模型属性的哈希。 (可选) 可以传入外部属性哈希,返回属性 在那个与模型不同的哈希中。这可以用来计算 应该更新视图的哪些部分,或者需要调用哪些部分 可以将更改同步到服务器。
或检查特定属性是否已更改使用hasChanged
函数
<强> hasChangedmodel.hasChanged([属性])强>
自上次“更改”事件以来模型是否已更改?如果传递属性,则返回true 如果该特定属性已更改。
var nameChanged = this.model.hasChanged("name");
答案 1 :(得分:12)
如果您只想通知名称是否已更改,则可以绑定到change:name
:http://documentcloud.github.com/backbone/#Model-set