我正在尝试将功能添加到我的应用中,以便我可以更新我的数据库,然后更新DOM。数据库得到了很好的更新,但DOM却没有。以下是我的观点的一部分:
App.Views.Table = Backbone.View.extend({
tagName: 'span',
initialize: function(options) {
this.model.on('change', this.render, this);
this.model.on('update', this.remove, this);
this.template = this.options.template;
this.url = this.options.url;
},
events: {
'click .verify': 'verify',
'click .spam': 'spam',
'click .duplicate': 'duplicate'
},
verify: function(e) {
id = e.currentTarget.id;
table = new App.Models.Table({ id: id });
table.urlRoot = this.url;
table.fetch();
table.toJSON();
table.set('verified', 1);
table.save();
},
spam: function(e) {
...
},
duplicate: function(e) {
...
},
remove: function() {
this.$el.remove();
console.log('hello');
},
retrieveTemplate: function(model) {
return _.template($('#' + this.template).html(), model);
},
render: function() {
//console.log(this);
this.$el.html(this.retrieveTemplate(this.model.toJSON()));
return this;
}
});
据我了解,this.model.on('update', this.remove, this);
应在save
完成时调用我的删除功能。但是回调没有触发,因为我没有得到console.log
并且我的DOM没有被更新。我究竟做错了什么?我按照教程,但在教程中一切正常。
答案 0 :(得分:2)
没有update
事件。我想你的意思是sync
http://backbonejs.org/#Events-catalog
"sync" (model, resp, options) — when a model has been successfully synced with the server.
我发现调试的一个有用的方法是使用all
事件来查看触发了哪些事件。
修改强>
经过一些调试后,verify()
函数的目标是将已验证的属性保存到模型中。为此,我们需要将verify()
更改为
this.model.set('verified', 1);
this.model.save();
而不是创建新的App.Model.Table
并将其设置为table
变量。执行table
.save()正在保存新 table
模型,而不是旧模型this.model
。这就是附加到this.model
的事件处理程序被触发的原因。
答案 1 :(得分:0)
Backbone.js中没有“创建”或“更新”事件。这就是你的remove()回调没有触发的原因。
请参阅http://backbonejs.org/#Events-catalog以获取Backbone中可能发生的事件的目录。
的更新强> :
仔细查看代码后,答案很明确。它们是不同的模型:
initialize: function(options) {
this.model.on('change', this.render, this);
this.model.on('sync', this.remove, this);
和
table = new App.Models.Table({ id: id });
...
table.save();
table
对象上发生的事件不会触发绑定到完全不同模型的事件处理程序(this.model)。
为什么在您拥有模型时创建另一个模型(表)? (this.model)?
*更新*
我真的不明白你要做什么,但也许可以试试这个:
table = new App.Models.Table({ id: id });
table.on('sync', this.remove, this);