从localStorage转换Backbone的Todo List示例

我一直在看待Backbone.js的Todo列表示例 ( 源代码 )。 代码使用本地存储,我想尝试转换它,以便通过RESTful Web服务进行操作。

假设web服务已经存在于路由todos/ 。 我想我需要添加一个urlBackbone.Model.extend并删除localStorage: new Store("todos")行时,我们执行Backbone.collection.extend

  window.Todo = Backbone.Model.extend({ url : function() { return 'todos/'+this.id; } // Default attributes for a todo item. defaults: function() { return { done: false, order: Todos.nextOrder() }; }, // Toggle the `done` state of this todo item. toggle: function() { this.save({done: !this.get("done")}); } }); 

什么是正确的方法来做到这一点?

Url应该在Collection中设置,如果你需要比集合创build的url更不同的url,那么比在model中声明url更为重要。

你需要删除

  <script src="../backbone-localstorage.js"></script> 

从index.html开始,因为它在backbone.js之后被链接,并且有效地覆盖了Backbone的同步方法来存储在localStorage中。

我会离开模型,因为它是在托多斯的例子。 在集合类中添加这个属性:

 window.TodoList = Backbone.Collection.extend({ ... url: '/todos', ... } 

调用集合上的fetch()应该检索Todo对象的列表。

如果您使用的是Rails,则需要设置ActiveRecord::Base.include_root_in_json = false否则Backbone.js将无法从返回的json中取出Todo对象。