集合在视图初始化时添加事件触发

时间:2014-08-04 14:05:28

标签: javascript backbone.js backbone-collections

我的骨干应用程序中有这个代码,

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'...)似乎在初始化视图时运行,并且在保存模型时再次运行,我如何只在保存模型时运行方法,而不是初始化视图

1 个答案:

答案 0 :(得分:0)

我建议您在视图中执行this.listenTo(this.collection, ...,因为删除视图后,它会删除事件并避免内存泄漏。

add事件将在集合的每个.set上触发。如果您在集合初始化时传递了模型,则会ctor -> reset -> add -> set添加这些模型,以便您获得resetadd个事件。

没有任何意义的是,在初始化视图之前,您的集合应该已初始化,因此我不知道您为什么要获得该事件,除非您随后添加更多模型。

要收听保存事件,您可以在集合中使用这些事件:

request - 请求开始时 sync - 请求成功发生时 error - 出了点问题

PS这是this.$el.find - >的快捷方式this.$('.someselector')