我的骨干应用程序中有这个代码,
createNewProject: function(e) {
e.preventDefault();
this.createNewProject = new app.CreateNewProject({
collection: this.dropdownListProjectCollection
});
}
app.CreateNewProject = Backbone.View.extend({
el: '.modal',
template: _.template( $("#tpl-create-new-project").html() ),
events: {
'click input[type="submit"]' : 'saveBasicProject'
},
initialize: function() {
this.collection.on("add", console.log("added"));
this.$el.find("h4").text("Create new project");
this.$el.find(".modal-body").html( this.template() );
this.render();
return this;
},
我正在尝试检测何时将模型添加到集合中,然后最终触发一个方法来呈现该新记录。但是我遇到的问题是this.collection.on('add'...
)似乎在初始化视图时运行,并且在保存模型时再次运行,我如何只在保存模型时运行方法,而不是初始化视图
答案 0 :(得分:0)
我建议您在视图中执行this.listenTo(this.collection, ...
,因为删除视图后,它会删除事件并避免内存泄漏。
add事件将在集合的每个.set
上触发。如果您在集合初始化时传递了模型,则会ctor -> reset -> add -> set
添加这些模型,以便您获得reset
和add
个事件。
没有任何意义的是,在初始化视图之前,您的集合应该已初始化,因此我不知道您为什么要获得该事件,除非您随后添加更多模型。
要收听保存事件,您可以在集合中使用这些事件:
request
- 请求开始时
sync
- 请求成功发生时
error
- 出了点问题
PS这是this.$el.find
- >的快捷方式this.$('.someselector')