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
Backbone.js 从远程Url加载时,集合呈现良好,但从本地存储加载时(初始化与onRender)_Backbone.js_Backbone Local Storage - Fatal编程技术网

Backbone.js 从远程Url加载时,集合呈现良好,但从本地存储加载时(初始化与onRender)

Backbone.js 从远程Url加载时,集合呈现良好,但从本地存储加载时(初始化与onRender),backbone.js,backbone-local-storage,Backbone.js,Backbone Local Storage,我正在使用布局的“initialize”方法来实例化一个集合,从该集合上的url获取()数据,然后实例化一个新的collectionView,该视图使用它获取的数据通过该集合。collectionView稍后将在区域中“显示” 它工作得很好 我想切换到使用localStorage来检索数据,而不是从远程url检索数据。因此,我将从远程url检索到的数据保存到本地存储中。然后我用“localStorage:new Backbone.localStorage('entries')更新了集合。现在它成

我正在使用布局的“initialize”方法来实例化一个集合,从该集合上的url获取()数据,然后实例化一个新的collectionView,该视图使用它获取的数据通过该集合。collectionView稍后将在区域中“显示”

它工作得很好

我想切换到使用localStorage来检索数据,而不是从远程url检索数据。因此,我将从远程url检索到的数据保存到本地存储中。然后我用“localStorage:new Backbone.localStorage('entries')更新了集合。现在它成功地从localStorage检索数据。但是布局中没有一个区域得到渲染(我尝试在不同的地方调用this.render(),但运气不好)

如果我在负责实例化所有内容的布局中将“initialize”方法替换为“onRender”,那么它将完美地呈现(无论它是来自远程url还是本地存储)

为什么如果我使用布局的“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);
        });
    },

    ...

我正在使用木偶网的布局、CollectionView、ItemView等,不确定这对问题有多重要。

你能在JSFIDLE中重现这一点吗?嗨,帕特,我会尝试“是”,并让你知道同样的问题。