2012-05-12 138 views
1

以下代码可行,但我想提高可读性和可访问性,避免编写callbacksbackbone.js:如何绑定渲染

我需要在我的集合上执行提取时渲染我的视图。

这里的工作代码:

var MyView = Backbone.View.extends({ 

    initialize: function() 
    { 
     var that = this; 

     MyCollection.fetch({ 
      success: function() { 
       that.render(); 
      } 
     }); 
    }, 

    .... 

}); 

这里我尝试不工作:

var MyView = Backbone.View.extends({ 
    initialize: function() 
    { 
     MyCollection.fetch(); 
     MyCollection.bind('change', this.render); 
    }, 

    .... 
}); 

回答

2

看起来你需要设置context呼叫到bind。像这样:

MyCollection.bind('change', this.render, this); 

Coffeescript的一个优秀之处在于它能够更加干净地处理这些事情。

ETA:change事件未在fetch上触发,仅在集合中的某个模型发生更改时触发。 reset is,但。另外,您在触发提取后绑定到该事件,不确定这是否是您的意图。

另外:我似乎很困惑,你正在资本化的MyCollection成员,使它很容易与class混淆。

+0

感谢您建议我大写错误。总之'MyCollection.bind('change',this.render,this);'不能解决问题。 – underscore666

+0

好的,我用可能的解决方案更新了答案。但是你能给出更多关于发生什么的解释吗?它只是从不渲染? –

+0

制作MyCollection.bind('change',this.render,this);'渲染器永远不会调用。关于模型......当集合获取被执行时,它会改变吗?如果是的话,我该怎么做? – underscore666