我想知道是否可以通过以下方式将模型添加到集合中。 我试过了,但没有用。如果我直接添加 JSON [] 它会。我知道这有点奇怪,但我正在努力更好地了解 BB 的工作原理。谢谢。
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"}]
最佳答案
由于服务器的响应是一个只有一个元素的数组,您需要添加一个parse function。返回数组的第一个元素:
var UserModel = Backbone.Model.extend({
urlRoot: '/users',
parse: function(response){
if(response && response.length) return response[0];
}
});
这应该允许模型正确解析服务器响应中的属性:[{"name":"john","email":"john@bb.com"}]
.
顺便说一句,您正在成功函数中创建用户集合,因此它在该函数之外不可用。它可能只是您发布的示例代码,但您可以在外部创建用户集合并在成功函数中添加模型:
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
}
});
我有created a fiddle所以你可以试一试。 (我使用了 fiddle echo 服务,所以这就是为什么我更改了 url 并且它使用的是 POST)。如果您运行它并检查控制台,您将看到正在记录的用户集合,您可以检查它的 models
属性。
关于javascript - Backbone.js 将从服务器检索到的模型添加到集合中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25536147/