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
集合-JSON响应的模型用法?_Json_Backbone.js_Backbone.js Collections - Fatal编程技术网

集合-JSON响应的模型用法?

集合-JSON响应的模型用法?,json,backbone.js,backbone.js-collections,Json,Backbone.js,Backbone.js Collections,关于集合和模型的主干模式使用,我不确定我试图实现的目标是否可行 我希望集合通过发出AJAX POST请求来获取JSON,从而充当构造函数。使用该JSON响应,它将实例化多个模型并将它们添加到一个数组中 每个对象都具有将存储在我的模型中的属性,例如 define([ 'underscore', 'backbone' ], function (_, Backbone) { 'use strict'; var Employee= Backbone.Model.

关于集合和模型的主干模式使用,我不确定我试图实现的目标是否可行

我希望集合通过发出AJAX POST请求来获取JSON,从而充当构造函数。使用该JSON响应,它将实例化多个模型并将它们添加到一个数组中

每个对象都具有将存储在我的模型中的属性,例如

    define([
    'underscore',
    'backbone'
], function (_, Backbone)
{
    'use strict';

    var Employee= Backbone.Model.extend({

        defaults: {
            name: '',
            skill: '',
            latitude : 0,
            longitude : 0
        },

    });

    return Employee;
});
JSON响应

[
{
    "name" : "bob",
    "skill" : "project manager",
    "latitude" : 12512.25,
    "longitude" : 95952.26
},


{
    "name" : "sarah",
    "skill" : "software dev",
    "latitude" : 89432.25,
    "longitude" : 1205.26
},


{
    "name" : "tom",
    "skill" : "evil sys admin",
    "latitude" : 1215,
    "longitude" : 92325
}
emps = new Employees();
emps.url("/testURL"); //
emps.sync();

emps.model[0]; //undefined !!!
]

收藏

    define([
    'underscore',
    'backbone',
    'models/employee'
], function (_, Backbone, Store, Employee) {
    'use strict';

    var Employees = Backbone.Collection.extend({
        // Reference to this collection's model.
        model: Employee,

    });

    return new Employees();
});
代码

[
{
    "name" : "bob",
    "skill" : "project manager",
    "latitude" : 12512.25,
    "longitude" : 95952.26
},


{
    "name" : "sarah",
    "skill" : "software dev",
    "latitude" : 89432.25,
    "longitude" : 1205.26
},


{
    "name" : "tom",
    "skill" : "evil sys admin",
    "latitude" : 1215,
    "longitude" : 92325
}
emps = new Employees();
emps.url("/testURL"); //
emps.sync();

emps.model[0]; //undefined !!!
因此,我可以得出结论,集合不够聪明,无法从JSON响应实例化员工模型数组。
如何执行此操作?

现在,您的集合构造函数代码将
未定义
作为其输入数组,因此保持为空

您希望将集合传递到Employees构造函数中,如

var emps=新员工(arrayOfEmployees,{model:Employee})


另外,最后一部分(重新指定模型)可能不是必需的。

您正在寻找的函数是。Fetch使用
sync
获取数据,然后相应地实例化模型

如果您的API没有响应
GET/someurl
,那么您需要覆盖的是方法。阅读源代码以了解其工作原理

另外,您没有正确使用url。它应该是一个字符串,或者是一个返回字符串的函数

var employees = new Employees();
employees.url = '/my/testurl';
// note that fetch is async
employees.fetch().done(function () {
  console.log(employees.length);
});

您是否打算使用
emps.fetch()
?不,因为我没有使用REST样式,所以我使用Sync发出POST请求并希望使用其响应我相信Sync也会创建样式请求(实际上是
Sync
的代理)。您可以覆盖集合的
sync
方法及其解析方法,以匹配服务器的web服务。另一方面,由于
sync
是异步的,您没有正确测试集合是否返回任何数据,您需要在回调中执行此操作。@loosebruce此处没有任何请求,这是您如何在一开始或手动请求时将模型数组传递给引导数据的方法。@loosebruce可以,这就是
fetch
的用途。我只是想指出,就我所知,这个答案并没有真正解决你的问题。