您可以将集合存储在全球可访问的位置。我见过人们在引导他们的应用程序时将它们附加到他们的应用程序对象上。
App.States = new StatesCollection();
App.States.fetch();
如果您在 CompositeView 对象中创建了这个集合,那么您可以使用 childViewOptions 参数将它传递给每个孩子。
var QueueItems = Marionette.CompositeView.extend({
childViewOptions: {
states: this.states
},
initialize: function() {
this.states = new StatesCollection();
this.states.fetch();
}
}
然后您可以在 childView 初始化中抓取它。
var QueueItem = Marionette.ItemView.extend({
initialize: function(options) {
this.states = options.states;
}
}
至于担心它们是否已加载,您应该只在您的 ItemView 中添加一个侦听器,以便在集合同步或重置时呈现。然后它会在您获取或加载集合时重新呈现自己。
var QueueItem = Marionette.ItemView.extend({
initialize: function(options) {
this.states = options.states;
this.listenTo(this.states, 'sync reset', this.render);
}
}