Backbone.js将从服务器检索的模型添加到集合中

时间:2014-08-27 20:12:31

标签: javascript backbone.js

我想知道是否可以通过以下方式将模型添加到集合中。 我试过了它并没有用。如果我直接添加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"}]

1 个答案:

答案 0 :(得分:3)

由于服务器的响应是一个包含单个元素的数组,因此您需要添加一个返回数组第一个元素的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所以你可以尝试一下。 (我使用了小提琴回声服务,这就是为什么我更改了网址并使用了POST)。如果您运行它并检查控制台,您将看到正在记录的用户集合,您可以检查其models属性。