Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Backbone.js将从服务器检索到的模型添加到集合_Javascript_Backbone.js - Fatal编程技术网

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

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

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

由于来自服务器的响应是一个包含单个元素的数组,因此需要添加一个返回数组第一个元素的:

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”的属性结束,该属性的名称和电子邮件)