我一直关注Todo list example的source(Backbone.js)。代码使用本地存储,我想尝试转换它,以便它通过RESTful 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")});
}
});
这样做的正确方法是什么?
答案 0 :(得分:2)
如果您需要不同于集合创建的网址而不是在模型中声明网址,则应在集合中设置网址。
您需要删除
<script src="../backbone-localstorage.js"></script>
来自index.html,因为它在backbone.js之后链接,并且有效地覆盖了Backbone的同步方法以存储在localStorage中。
答案 1 :(得分:0)
我会在Todos示例中保留模型。在集合类中添加以下属性:
window.TodoList = Backbone.Collection.extend({
...
url: '/todos',
...
}
对集合调用fetch()
应检索Todo对象列表。
如果您使用Rails,则需要设置ActiveRecord::Base.include_root_in_json = false
否则Backbone.js将无法从返回的json中提取Todo对象。