我正在使用一个rails服务器,它在转到' / todos'时会返回这个JSON对象。路由。
[{"id":1,"description":"yo this is my todo","done":false,"user_id":null,"created_at":"2015-03-19T00:26:01.808Z","updated_at":"2015-03-19T00:26:01.808Z"},{"id":2,"description":"Shaurya is awesome","done":false,"user_id":null,"created_at":"2015-03-19T00:40:48.458Z","updated_at":"2015-03-19T00:40:48.458Z"},{"id":3,"description":"your car needs to be cleaned","done":false,"user_id":null,"created_at":"2015-03-19T00:41:08.527Z","updated_at":"2015-03-19T00:41:08.527Z"}]
我正在将此代码用于我的收藏。
var app = app || {};
var TodoList = Backbone.Collection.extend({
model: app.Todo,
url: '/todos'
});
app.Todos = new TodoList();
但是,在尝试获取数据时,它表明该对象未定义。我原本以为我的函数没有正确解析JSON。但是,事实并非如此。我创建了一个包含调试器的解析函数来查看响应。在返回时,一个包含三个对象的数组。
当我尝试测试fetch()时会发生什么。
var todos = app.Todos.fetch()
todos.length // returns undefined
todos.get(1) // TypeError: undefined is not a function
todos集合不会自动在控制台中填充函数get()。我对可能出现问题的想法已经不多了。请帮忙。谢谢!
答案 0 :(得分:1)
Fetch是一个同步的,你需要听取add事件:
var todos = app.Todos.fetch()
todos.on('add', function(model){
console.log(todos.length);
});
如果您通过参数重置,您可以收听新模型:
var todos = app.Todos.fetch({reset: true})
todos.on('reset', function(model){
console.log(todos.length);
});
您还可以阅读here。
答案 1 :(得分:0)
有两个问题:
app.Todos.fetch()
将导致app.Todos
包含请求获取的任何模型。它的返回值对于检查集合没有用,因此var todos = app.Todos.fetch()
在任何情况下都不会给你你想要的东西。如果您想检查从服务器收到的内容,最好的选择是设置成功回调:
app.Todos.fetch({
success: function (collection, response, options) {
console.log(collection);
}
});