Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 主干木偶复合视图onRender执行两次_Jquery_Backbone.js_Requirejs_Marionette - Fatal编程技术网

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。您实际使用的是哪个版本?我建议你还是更新到上一个版本。更新到上一个版本。但错误依然存在