2016-02-26 58 views
0

我有以下挑戰:Backbone.js的 - 收集請求事件不觸發

我想我每次獲取數據的時間來實現負載花。

啓動代碼看起來是這樣的:

var myCollection = new MyCollection({}); 
myCollection.fetch({ 
     success: function() { 
      var listView = new ListView({model: myCollection}); 
     } 
}); 

視圖看起來是這樣的:

var ListView = Backbone.View.extend({ 
    ... 

    initialize: function() { 
     this.model.bind('request', this.ajaxStart, this); 
     this.model.bind('sync', this.ajaxComplete, this); 
     self.render(); 
    }, 
}); 

我的問題:request事件不是因爲當時發射時,請求開始,ListView尚未設置。

我試圖改變我的引導代碼,但沒有任何工作到目前爲止。這總是一個chicken or the egg問題。要麼我在正確的地方設置了視圖,要麼我有數據。

我試圖將collection實例傳遞給視圖,但這似乎不可能通過set()或其他方法。

THX 羅恩

回答

1

你或許應該重新組織結構,設置集合作爲一個視圖模型並不十分明顯。也許你應該添加ListModel,它將處理你的集合實例化和更新,然後設置你的視圖來監聽你的ListModel自定義事件。至於雞/蛋的問題

var myCollection = new MyCollection(); 
var myView = new MyView({ 
    collection: myCollection, 
}); 

myCollection.fetch(); 

// inside your view 
initialize: function() { 
    this.listenTo(this.collection, 'sync', this.render); 
} 
+0

很多您的意見。作品!對我來說,爲我獲得正確的骨幹結構還有點困難。有太多的方法來做事情:) – Ron

+1

這是Backbone的重點,它給你所有的控制權,但另一方面有時你有太多的選擇)。但是,越多使用它越好。另外,請考慮閱讀Addy Osmani的Backbone基礎知識https://addyosmani.com/backbone-fundamentals/ –