我正在做一个本地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()
?
答案 0 :(得分:0)
是否要将修改后的数据写回.json文件,或者是否要将.json文件用作初始数据,然后使用Local Storage / IndexedDB / Web SQL / ...进行持久化?无论如何,Backbone非常轻巧,并且不支持开箱即用的这些功能。你自己写这个,或者找一个这样做的插件。
在HTML5应用程序中写入本地文件应该可以使用FileSystem API,但要让它在所有浏览器中都能正常工作可能会很棘手。此外,您只能在文件系统的特殊沙盒部分中读/写文件。
对于本地存储,请查看backbone-localstorage.js插件。 Backbone附带的Todo示例应用程序也在使用此插件。基本上,我需要覆盖模型的提取和同步方法。