我有一个 Backbone puppet 合成视图如下
VideosView = Backbone.Marionette.CompositeView.extend({
template : videosTpl,
id : "video",
itemView : VideoView,
initialize : function() {
//fetching the collection
var myVideos = new VideoCollection();
myVideos.fetch();
this.collection = myVideos;
},
appendHtml : function(collectionView, itemView) {
//appending each videos to the video list
console.log("appendHtml");
collectionView.$("ul").append(itemView.el);
},
onRender: function(){
console.log("onRender");
},
onShow: function(){
console.log("onShow");
}
});
控制台中的输出为
- 渲染
- 显示
- 4个附件Html
- 渲染
根据 Backbone puppet 的预期代码流是
- 4个附件Html
- 渲染
- 显示
怎么会这样?
2条答案
按热度按时间x0fgdtte1#
这可能是因为您正在初始化函数中获取数据?获取会导致collection.reset(),因此您的Composite视图将按照文档中的说明重新呈现:
“复合视图的模型和集合将在以下条件下重新呈现自身:
事实上,当您将
myVideos
的值赋给this.collection
时,由于Javascript的异步特性,您不能保证fetch()
已经完成了它的工作。在调用VideosView时,请尝试类似的操作:
当然,现在您可以清空初始化函数。
g6ll5ycj2#
您使用的是哪个版本的Marionette?在v1.0.0-beta1中有一个错误导致了这个问题:https://github.com/marionettejs/backbone.marionette/issues/287
它在v1.0.0-beta2中得到了修复(在撰写本文时,最新版本是v1.0.0-beta3)