我正在做一个本地Backbone.js应用程序,并使用一个名为data的本地文件夹放置初始数据。在Backbone.router中,我使用ajax来获取初始数据,如下所示:

p = $.ajax({
        url: 'data/todolist.json',
        dataType: 'json',
        data: {},
        success: function(data) {
            var approuter = new AppRouter({data: data});
            Backbone.history.start();
        }
    })

我的initialize中的AppRouter方法如下:
initialize: function(options){
        this._data = options.data;
        this._todos = new TodosCollection(options.data);
        this._length = this._todos.length;
        this._index = new CategoriesView({collection: this._todos});
    },

在我的应用程序中,每次创建,删除和更新Backbone.View中的项目时,我都会使用this.model.destroy()this.collection.add()this.model.set()更新我的模型和集合。但似乎并没有将这些更改保存到我的初始数据中,即上面的“todolist.json”。当我刷新整个页面时,该应用程序仍显示初始数据。我要做的是,每次View中发生某些更改时,数据文件都会更新。那么我应该如何实现呢?

另一个问题:如果我想使用localStorage保留这些数据怎么办?我不需要在路由器中使用Ajax call 吗?我只是在一开始就在Router的Backbone.Collection.fetch()方法中使用了initialize方法,并且在应用启动后,每次我使用this.model.destroy()this.collection.add()this.model.set()时,localStorage都会自动更新数据?

最佳答案

您是否要将修改后的数据写回到.json文件,还是要将.json文件用作初始数据,然后使用Local Storage / IndexedDB / Web SQL / ...进行持久化?无论如何,Backbone相当轻巧,并且不支持上述任何一种功能。您必须自己编写此代码,或者找到一个可以执行此操作的插件。

使用FileSystem API在HTML5应用程序中应该可以写入本地文件,但是要使其在所有浏览器中都能正常工作可能会很棘手。此外,您只能在文件系统的特殊沙盒区中读取/写入文件。

对于“本地存储”,请查看osteo-localstorage.js插件。 Backbone随附的Todo示例应用程序也正在使用此插件。基本上,从我的头开始,您需要重写模型的访存和同步方法。

08-25 19:49
查看更多