Javascript Backbone.js将从服务器检索到的模型添加到集合
我想知道是否可以通过以下方式向集合添加模型。 我试过了,但没用。如果我直接添加JSON[],它会这样做。我知道这有点奇怪,但我正试图更好地理解BB的工作原理。谢谢Javascript Backbone.js将从服务器检索到的模型添加到集合,javascript,backbone.js,Javascript,Backbone.js,我想知道是否可以通过以下方式向集合添加模型。 我试过了,但没用。如果我直接添加JSON[],它会这样做。我知道这有点奇怪,但我正试图更好地理解BB的工作原理。谢谢 var UserModel = Backbone.Model.extend({ urlRoot: '/users', }); var UserModels = Backbone.Collection.extend({ url: '/users', model: UserModel }); var user
var UserModel = Backbone.Model.extend({
urlRoot: '/users',
});
var UserModels = Backbone.Collection.extend({
url: '/users',
model: UserModel
});
var user = new UserModel({id:1});
user.fetch({ // get the model
success: function (user) {
var users = new UserModels();
users.add(user); // add the model to a collection
}
});
正在从服务器回显以下模型:
[{"name":"john","email":"john@bb.com"}]
由于来自服务器的响应是一个包含单个元素的数组,因此需要添加一个返回数组第一个元素的:
var UserModel = Backbone.Model.extend({
urlRoot: '/users',
parse: function(response){
if(response && response.length) return response[0];
}
});
这将允许模型正确解析服务器响应中的属性:[{“name”:“john”,“email”:john@bb.com“}]
顺便说一下,您正在success函数中创建users集合,因此它在该函数之外不可用。它可能只是您发布的示例代码,但您可以在外部创建users集合,并在success函数中添加模型:
var users = new UserModels();
var user = new UserModel({id:1});
user.fetch({ // get the model
success: function (user) {
users.add(user); // add the model to a collection
}
});
我有,所以你可以试一试。(我使用了fiddle echo服务,所以我更改了url,它使用了POST)。如果运行它并检查控制台,您将看到用户集合被记录,您可以检查它的
models
属性。这应该可以正常工作。我看到的唯一问题是,您返回的是模型列表,而不是单个模型。这似乎是错误的,因为您只获取一个模型。您在ajax调用的响应中看到了什么(在开发工具中)?下面的答案是有效的。我认为向集合添加带有一个元素的数组是有问题的。要想让它工作,需要把[]剥掉。太好了。工作得很好。谢谢如果没有PUT和POST请求的解析函数,这似乎可以正常工作。似乎只有GET users/id需要它。有什么解释吗?小提琴是用柱子的。如果删除parse函数,集合将获得一个模型,但该模型的属性不正确(它以原始属性id和另一个名为“0”的属性结束,该属性的名称和电子邮件)