2

私は次のようにバックボーンマリオネット複合ビューを持っています

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 appendHtml
  • onRender

バックボーン マリオネットによると予想されるコード フローは、

  • 4 appendHtml
  • onRender
  • onShow

これはどのように起こりますか?

4

2 に答える 2

2

初期化関数でデータを取得しているためでしょうか? フェッチにより collection.reset() が発生するため、 Composite ビューはドキュメントに記載されているように再レンダリングされます。

「複合ビューのモデルとコレクションは、次の条件下で再レンダリングされます。

  • コレクションの「リセット」イベントが発生すると、ラッパー テンプレートではなく、コンポジット内のコレクションのみが再レンダリングされます..."

実際、Javascript の非同期の性質によりthis.collection、値を代入しても、その仕事が完了しmyVideosたとは限りません。fetch()

VideosView を呼び出すときに、次のようなことを試してください。

var myVideos = new VideoCollection();

myVideos.fetch({success:function(){

    var View = new VideosView({collection:myVideos});
}});

もちろん、初期化関数を空白にすることができます。

于 2012-10-25T12:52:18.190 に答える
0

どのバージョンのマリオネットを使用していますか?v1.0.0-beta1でこれを引き起こしたバグがありました:https ://github.com/marionettejs/backbone.marionette/issues/287

これはv1.0.0-beta2で修正されました(これを書いている時点での最新リリースはv1.0.0-beta3です)

于 2012-10-25T14:44:02.483 に答える