我正在尝试创建简单的Backbone示例,但我不明白我的代码有什么问题。为什么有2个testAttr属性(直接在对象上,在属性对象中有一个)以及为什么不更改任何触发任何更改?另外,我不明白在模型上设置属性的正确方法是什么?
继承我的代码:
<div id="note"></div>
<script>
var NoteModel = Backbone.Model.extend({
defaults: function() {
return {
testAttr: "Default testAttr"
}
}
});
var NoteView = Backbone.View.extend({
initialize : function() {
this.listenTo(this.model, "change", this.changed());
},
el: "#note",
changed: function () {
debugger;
console.log("change triggered");
this.render();
},
render : function() {
this.$el.html("<h1>" + this.model.get("testAttr") + "</h1>");
return this;
}
});
var note = new NoteModel();
var noteView = new NoteView({model: note});
noteView.render();
note.set("testAttr", "blah1");
note.testAttr = "blah2";
</script>
答案 0 :(得分:1)
更改此行:
this.listenTo(this.model, "change", this.changed());
到此:
this.listenTo(this.model, "change", this.changed);
对于问题的第二部分,使用.set()
进行一组脏检查以查看您是否更改,删除或未更改任何内容,然后触发相应的事件。它没有设置object.property
值,而是设置object.attributes.property
值(由backbone.js跟踪)。如果您直接更改了对象属性,则无法为您启动该事件。
...除非您使用令人惊讶和有品位 Object.observe()
!!! 1! - ITS ALIVE (in Chrome >36) 强>