【问题标题】:Binding Backbone change event to attribute of model in a collection将主干更改事件绑定到集合中模型的属性
【发布时间】:2013-02-05 20:32:09
【问题描述】:

我有一个采用collection 的视图,如下所示:

MyView = Backbone.View.extend({
    initialize: function() {
       this.collection.on("change://an attribute of a model in aCollectionToRender", someAction);
    }
});

var MyViewInstance = new MyView({
    collection: aCollectionToRender
});

基本上,我不希望MyView 监听整个集合的变化,只监听集合包含的模型的单个属性。

我意识到有很多替代方案:

  1. aCollectionToRender 的每个模型创建视图,并在这些视图中附加.on("change") 事件。我不想这样做,因为这不适合我的情况
  2. 只需有一个this.collection.on("change") 事件并根据我的要求使用事件处理程序过滤器。这不太优雅,如果 Backbone 已经允许我按照我上面的要求编写事件过滤器,那么这是重复代码

我只是想知道是否有任何方法可以编写一个已经进行过滤的事件侦听器。这个问题也可能是重复的;我看了,但我没有找到完全一样的东西,但是,有很多 Backbone 问题

【问题讨论】:

    标签: backbone.js backbone-events


    【解决方案1】:

    也许我误解了你的问题,但你可以完全按照你的说明做。查看Backbone documentation

    MyView = Backbone.View.extend({
        initialize: function() {
           this.collection.on("change:attributeName", this.someAction /*function to call*/, this);
        },
        someAction: function(model, value, options){
        }
    });
    

    【讨论】:

    • 噢!我想你是正确的!出于某种原因,我认为当它是一个集合时,change:attributeName 中的 attributeName 指的是集合的属性,而不是模型。
    • 好的,但是你怎么能做到这一点: this.collection.on("change",function(model,property){ //获取这里改变的属性... }); ???
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    相关资源
    最近更新 更多