这似乎应该是显而易见的,但似乎有很多不同的例子,其中大部分会给我带来错误,让我觉得它们已经过时了。基本情况是我有一个MessageModel链接到MessageView,它扩展了ItemView,MessageCollection链接到MessageCollectionView(itemView:MessageView)。我有一个稍微不寻常的情况,因为MessageCollection是异步填充的,所以当页面首次呈现时,它是空的,并且会显示“正在加载”图标。也许我的结构不正确(请参阅here了解历史记录),但是现在,我已经封装了向服务器发出初始请求的代码,并接收了MessageCollection对象中的初始消息列表,以便它更新自己。但是,鉴于此,我不清楚如何触发显示视图。显然,模型不应该告诉视图呈现,但是我没有尝试实例化视图并让它监听modelChange事件并调用“render”。
我试过了:
这是代码
Entities.MessageCollection = Backbone.Collection.extend({
defaults: {
questionId: null
},
model: Entities.Message,
initialize: function (models, options) {
options || (options = {});
if (options.title) {
this.title = options.title;
}
if (options.id) {
this.questionId = options.id;
}
},
subscribe: function () {
var self = this; //needed for proper scope
QaApp.Lightstreamer.Do('subscribeUpdate', {
adapterName: 'QaAdapter',
parameterValue: this.questionId,
otherStuff: 'otherstuff',
onUpdate: function (data, options) {
console.log("calling sync");
var obj = JSON.parse(data.jsonString);
self.set(obj.Messages, options);
self.trigger('sync', self, obj.Messages, options);
}
});
},
});
Views.MessageCollectionView = Backbone.Marionette.CollectionView.extend({
itemView: Views.MessageView,
tagName: 'ul',
// modelEvents: {
// 'change': 'render'
// },
onAfterItemAdded: function (itemView) {
this.$el.append(itemView.el);
}
});
var Api = {
subscribe: function (id) {
var question = new QaApp.Entities.Question(null, { id: id });
question.subscribe();
var questionView = new QaApp.Views.QuestionView(question);
QaApp.page.show(questionView);
}
};
我非常感谢我已经收到的所有帮助,并提前感谢您的期待。
答案 0 :(得分:3)
试试这个:
var questionView = new QaApp.Views.QuestionView({
collection: question
});