模板中的骨干嵌套集合监听添加

时间:2014-08-28 09:43:54

标签: javascript backbone.js backbone-views backbone-collections

我有一个包含集合的模型。在我的网络应用程序中,我有一个项目模型,并且我有一个名为“协作者”的属性,这个属性实际上是用户的集合。

在初始化我的观点时,我有以下内容,

this.model.get('collaborators').on( 'change', alert("!!"), this);

当视图第一次加载时,我得到一个警报,进一步进入视图我有一个事件,触发了以下内容,

var newModel = new app.User({ id: this.clickedElement.data('userId') });
                console.log(this.model.get(this.formSection)); // shows that the collection has 4 models
                newModel.fetch({
                    success: function() {

                        that.model.get(that.formSection).add(newModel);
                        console.log(that.model.get(that.formSection)); //shows that the collection has 5 models

                    }

                });

正如您在上面的代码中看到的那样,我正在记录我的协作者集合,它显示长度为4,在成功方法中获取之后,我是否添加了刚刚获取到该集合的模型,然后记录了再次收集,这次它返回5的长度。

这对我来说意味着添加成功,在初始页面视图之后“add”的事件监听器是否也没有触发?

2 个答案:

答案 0 :(得分:0)

麻烦的是你应该将一些函数作为on方法的第二个参数传递。但是你在事件绑定时刻正在触发alert并传递alert的结果而不是函数。 这应该正常工作:

this.model.get('collaborators').on('change', function(){
    alert("!!");
});

更新但是你应该澄清你想要捕捉的事件。您可以通过在backbone.js文件中启动搜索trigger方法调用来查找在获取(或任何其他过程)期间触发的所有事件。

更新:您还可以使用此代码捕获所有已触发的事件:

collaborators.on('all', function(){
    /**
     * `arguments` object contains all of arguments passed to the function.
     * @see http://backbonejs.org/#Events-on for more details about `all`
     * catching.
     */
    console.log(arguments); 
});

答案 1 :(得分:0)

绑定到协作者时'更改事件,您应该使用Backbone的listenTo事件。

this.listenTo(this.model.get('collaborators'), "change", function(){alert("!!"), this);

http://backbonejs.org/#Events-listenTo

使用this.listenTo的优点是当视图被关闭/删除时,Backbone将自动调用this.stopListening,导致视图自动解除绑定事件。这将帮助您清理事件并防止幻像。

http://backbonejs.org/#Events-stopListening