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 = 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/

相关文章:

javascript - 主干模型保存和回调问题

javascript - 推送到 Backbone 中的属性

javascript - 为什么 jQuery 语法如此奇怪——它是如何被解析的?

javascript - 在 Backbone.js 中创建自定义 "sync"方法

javascript - Rails 4 - 从 ajax 更新表单中的值或数据属性并在 if 语句中使用此更新的值

javascript - jquery .show() 和 .hide() 在 safari 中不起作用 - 添加微调器到 <a href

Backbone.js 'swallows' 如果另一个事件触发重新渲染,则单击事件

model-view-controller - Javascript MVC 框架的目的

javascript - 表格内的下拉菜单 (CSS/HTML/Java)

javascript - 如何测试传递给函数的元素是否是文档本身?