2012-05-12 142 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