1

Composite View のComposite View ドキ​​ュメントによると、reseteventsはすでにコレクションにバインドされています。removeadd

resetそうは言っても、CompositeView をレンダリングするためにイベントをバインドする必要があるのはなぜですか?

PS:
私は使用してBackbone.Marionette v0.9.1
います 詳細についてはコードを参照してください (1)、(2)
実際の問題は serializeData に関するものです。これは、render 関数が initialEvents変数から呼び出されると、has_message がゼロに設定されるためです。そのため、ul.messagesはテンプレートで定義されていません。どうすれば直せますか?


(1)

var CompositeView = Marionette.CompositeView.extend({

    template: CompositeTemplate,

    itemView: messageView,

    initialize: function () {
        this.collection = new MessageCollection();
        this.collection.fetch();

        this.bindTo(this.collection, 'reset', this.render);
        // deleting the previous line 
        // I cannot see the collection rendered after the fetch.
    },

    serializeData: function () {
        return {
            has_messages: this.collection.length > 0
        };
    },


    appendHtml: function (collectionView, itemView) {
        collectionView.$el.find('ul.messages').append(itemView.el);
    }

});

(2)

// Template


{{#if has_messages }}
    <!-- list messages -->
    <ul class="list messages"></ul>
{{else}}
    no messages
{{/if}}
4

1 に答える 1

2

自分で「renset」にバインドする必要があるのは、複合ビューがリセット イベントを複合ビュー全体ではなく、コレクションのレンダリングにバインドするためです。

https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.compositeview.md#events-and-callbacks

serializeData 関数の問題は、おそらくコンテキストの問題が原因です。イベント バインディングを次のように変更する必要があります。

this.bindTo(this.collection, 'reset', this.render, this);

これにより、ビューのコンテキストがイベントにバインドされます。

于 2012-07-20T19:51:09.047 に答える