1

レイアウトの「initialize」メソッドを使用してコレクションをインスタンス化し、そのコレクションの URL からデータをフェッチしてから、フェッチされたデータでコレクションを通過する新しい collectionView をインスタンス化しています。collectionView は後でリージョンに「表示」されます。

それは完全に機能します。

リモートURLからではなく、localStorageを使用してデータを取得することに切り替えたいと思いました。そこで、リモート URL から取得したデータを localStorage に保存しました。次に、「localStorage: new Backbone.LocalStorage('entries')」でコレクションを更新しました。これで、localStorage からデータが正常に取得されます。しかし。レイアウト内のどの領域もレンダリングされません (さまざまな場所で this.render() を呼び出してみましたが、うまくいきませんでした)。

すべてのインスタンス化を担当するレイアウトで「initialize」メソッドを「onRender」に置き換えると、完全にレンダリングされます (リモート URL または localStorage から来たかどうかに関係なく)。

レイアウトの「initialize」メソッドを使用して localStorage からコレクション内のデータをフェッチすると、何もレンダリングされないのはなぜでしょうか。そのデータがリモート Url からフェッチされた場合、それはレンダリングされますか? 「onRender」メソッドを使用すると両方が機能するのはなぜですか?

参照用のコード:

    var EntriesCollection = Backbone.Collection.extend({
        model: EntryModel,
        url: '/api/entries',
        localStorage: new Backbone.LocalStorage('entries')
    });

    return EntriesLayout = Marionette.Layout.extend({

    ...

    // Below, if I use onRender everything works, if I change to 'initialize' then
    // it works only when data is loaded via remote url, not localStorage. (the collection
    // is successfully populated with data in both cases.)

    onRender: function() {

        ...

        this.entries_collection = new EntriesCollection();
        var self = this;
        this.entries_collection.fetch().done(function() {
           /*
            self.entries_collection.localStorage = new Backbone.LocalStorage('entries');
            self.entries_collection.each(function(model) {
                model.save();
            });
            */
            self.entries_list = new EntriesList({collection: self.entries_collection});

            self.collectionSynced();

       });
    },
    collectionSynced: function() {
        this.columnRight.show(this.voting_intro);
        this.collectionList.show(this.entries_list);
        this.listenTo(this.voting_intro, 'start:clicked', function() {
            this.displayEntry(0);
        });
    },

    ...

私はマリオネットのレイアウト、コレクションビュー、アイテムビューなどを使用していますが、それが質問にとってどれほど重要かはわかりません。

4

0 に答える 0