Jquery 主干木偶复合视图onRender执行两次
我有一个主干木偶组合视图,如下所示Jquery 主干木偶复合视图onRender执行两次,jquery,backbone.js,requirejs,marionette,Jquery,Backbone.js,Requirejs,Marionette,我有一个主干木偶组合视图,如下所示 VideosView = Backbone.Marionette.CompositeView.extend({ template : videosTpl, id : "video", itemView : VideoView, initialize : function() { //fetching the collection var
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");
}
});
控制台中的输出是
- onRender
- onShow
- 4附录HTML
- onRender
- 4附录HTML
- onRender
- onShow
这是如何发生的?这可能是因为您在初始化函数中获取数据?获取会导致collection.reset(),因此复合视图将按照文档中的说明重新呈现: “复合视图的模型和集合将在以下条件下重新渲染:
- 当集合的“重置”事件被激发时,它只会在复合内重新呈现集合,而不会重新呈现包装器模板…”
this.collection
的值分配给myVideos
时,由于Javascript的异步性质,您不能保证fetch()
已经完成了它的工作
打电话给VideosView时,请尝试这样做:
var myVideos = new VideoCollection();
myVideos.fetch({success:function(){
var View = new VideosView({collection:myVideos});
}});
当然,现在您可以清空初始化函数。您使用的是哪个版本的木偶?v1.0.0-beta1中有一个bug导致了这种情况:
它已在v1.0.0-beta2中修复(撰写本文时,最新版本为v1.0.0-beta3)我看到在加载文档之前创建VideosView时会发生这种情况。尝试在document.ready上创建VideosView。我已经使用了require js,视图正在document.ready上加载。哦,好的。尝试使用unminified Backbone.js代码单步遍历代码,查看哪个对象触发事件。旧的主干木偶1.0.0 beta版本中有一个bug。您实际使用的是哪个版本?我建议你还是更新到上一个版本。更新到上一个版本。但错误依然存在