我创建了一个名为“artist”的骨干模型和一个名为“artistView”的骨干视图。我成功地获取了模型,因为我可以在Chrome devtools网络标签中看到它。
然而,fetch当时没有触发任何“更改”事件。 奇怪的是,它在创建模型时很好地解决了“更改”事件,但是在获取此模型时没有... ...
我可以在fetch()方法中使用成功回调,但我觉得这不是最合适的方法。有什么想法吗?
型号&查看初始化:
var artist = new Artist({id: 3});
var artistView = new ArtistView({model: artist});
然后我获取了我的模型:
artist.fetch();
在我的主干View类中,我会听取来自模型的“更改”事件:
var ArtistView = Backbone.View.extend({
initialize: function() {
this.model.on("change", this.test());
},
test: function() {
console.log(this.model.get("name"));
}
});
编辑:“同步”事件也无效。当我创建模型时,它会很好地激活“同步”事件,但在成功获取模型时则不会。
答案 0 :(得分:3)
您需要使用“同步”事件。
var ArtistView = Backbone.View.extend({
initialize: function() {
this.model.on("sync", this.test());
},
test: function() {
console.log(this.model.get("name"));
}
});
仅在属性更改时更改。
编辑thx to stephen。
答案 1 :(得分:0)
问题来自我的事件监听器。它实际上没有考虑上下文。
以下是解决方案:
this.model.on("sync", this.test, this);
而不是
this.model.on("sync", this.test());