3

我正在做一个本地 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()在Router的initialize方法中使用了一个方法,应用程序启动后,每次使用时localStorage都会自动更新数据this.model.destroy()this.collection.add()还是this.model.set()

4

1 回答 1

0

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

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

对于本地存储,请查看backbone-localstorage.js 插件。Backbone 中包含的 Todo 示例应用程序也使用了这个插件。在我看来,基本上,您需要覆盖模型的 fetch 和 sync 方法。

于 2012-05-04T06:38:43.420 回答