我是BackboneJS的新手。我尝试了它的演示,但messages.fetch()没有任何结果。我重写Backbone.sync函数返回一个json,但messages.length总是0.这是我的代码:
var Message = Backbone.Model.extend({});
var MessageStore = Backbone.Collection.extend({
model: Message
});
Backbone.sync = function() {
return [{"content":"Hi there","id":1},{"content":"How are you?","id":2}];
}
var messages = new MessageStore;
messages.fetch();
console.log(messages.length); // 0
console.log(JSON.stringify(messages)); // []
我不知道哪里出错了。剂量反应必须是一定的结构?
答案 0 :(得分:2)
Backbone.sync
用作读取/写入服务器的传输机制,可以通过覆盖它来自定义,如documentation中所述。默认情况下,Backbone.sync
会返回XMLHttpRequest
个对象。
通常,fetch
是一个异步调用,但是当你过度使用Backbone.sync
时,你把它扔出了窗口,现在所有fetch
返回都是
[{"content":"Hi there","id":1},{"content":"How are you?","id":2}];
因此,如果您执行console.log(messages.fetch());
,您会看到上述内容,但messages
集合中没有任何更改。
让我们假设我们没有触及Backbone.sync
以下示例,回到主题。我认为您正在寻找Backbone.Collection
的{{3}}方法。
var Messages = Backbone.Collection.extend({
url:'/someurl',
parse:function(response) {
// by default response is returned, but you can manipulate the response here.
// given your example - we just return the static content - will be set on collection
return [{"content":"Hi there","id":1},{"content":"How are you?","id":2}];
}
});
//instantiate the new collection
var messages = new Messages();
messages.fetch({
success:function() {
console.log(messages.toJSON(),messages.length);
}
});
还记得我提到fetch
是异步的吗?请求完成后,您需要检查fetch
的结果,这就是您需要提供success
回调的原因。
您可以看到此演示parse。