从localStorage转换Backbone的Todo List示例
我一直在看待Backbone.js的Todo列表示例 ( 源代码 )。 代码使用本地存储,我想尝试转换它,以便通过RESTful Web服务进行操作。
假设web服务已经存在于路由todos/
。 我想我需要添加一个url
到Backbone.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对象。