2016-02-26 59 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/ –