1

まだ取得中のバックボーン 0.9.2{add: true}とマリオネット 1.0.0.b4を使用しています。

したがって、シナリオは、ページの読み込み時にコレクションを画面にレンダリングすることです (これはうまく機能します)。ここで、別のフェッチ呼び出しでそのコレクションに追加したいと思います。

私が理解しているすべてのことから、marionette.js は毎回 add 関数を reset 関数でオーバーライドします。

initializeEvents 関数を調べて、「リセット」イベントを独自のイベントにバインドしました。私のイベント内では、まだthis.collection.add();呼び出していないため、データをテンプレートにレンダリングしないことを除いて、うまく機能しますthis.render();

これはそれが吸うところです。だから私は呼び出すthis.render();と、データをレンダリングします。わーい!しかし、次のフェッチthis.render()でデータがリセットされます(マリオネットには、追加する代わりに常にリセットする独自のレンダリング機能があると思います)

initialEvents: function () {
        if (this.collection) {
            this.bindTo(this.collection, "add", this.addChildView, this);
            this.bindTo(this.collection, "remove", this.removeItemView, this);
            this.bindTo(this.collection, "reset", this.resetted, this);
        }
    },
    resetted: function (item, collection, options) {

        // this works, but doesnt render data into the template, just empty divs
        this.collection.add();

        // this.render() resets the collection.
        this.render();

    },

Item = collection (with all my data)
Collection  = {} (literally)
options = undefined

はい、resetted が最悪の関数名であることはわかっていますが、その sudo コードは何でも構いません。

マリオネット「collectionEvents」も試しましたが、レンダリングが発生した後にこれらの火災が発生することがわかりました。

4

1 に答える 1

0

バックボーン モデルとコレクションの両方に、parse と呼ばれるオーバーライド可能なメソッドがあります。

var B = Backbone.Collection.extend({
   ............,
   model: A,
   parse: function (data) {
       // manipulate your data here then return it
       return data;
   }
});

この機能は、同じ呼び出しで複数のコレクションを返し、データをコレクションのプロパティに保存するときに使用します。

var B = Backbone.Collections.extend({
    ..................,
    model: A,
    pagingCollection: {},
    parse: function(data) {
       this.pagingCollection = data.PageCollection;
       return data.CoreData;
    }
});
于 2013-03-13T15:18:57.880 に答える