如何在Backbone.js应用程序中保存对本地数据的任何更改?

时间:2012-04-29 23:38:15

标签: backbone.js

我正在做一个本地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”。当我刷新整个页面时,应用程序仍会显示初始数据。我想要做的是每次在我的视图中发生某些更改时,数据文件都会更新。那我该怎么做呢?

还有一个问题:如果我想使用localStorage来保存这些数据该怎么办?我不需要在路由器中使用ajax呼叫吗?我刚开始在路由器的Backbone.Collection.fetch()方法中使用initialize方法,在应用开始之后,localStorage会在每次使用this.model.destroy()时自动更新数据,{{1} }或this.collection.add()

1 个答案:

答案 0 :(得分:0)

是否要将修改后的数据写回.json文件,或者是否要将.json文件用作初始数据,然后使用Local Storage / IndexedDB / Web SQL / ...进行持久化?无论如何,Backbone非常轻巧,并且不支持开箱即用的这些功能。你自己写这个,或者找一个这样做的插件。

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

对于本地存储,请查看backbone-localstorage.js插件。 Backbone附带的Todo示例应用程序也在使用此插件。基本上,我需要覆盖模型的提取和同步方法。