Collection - JSON 响应的模型用法?

Collection - Model usage for JSON response?

关于 Backbone 用于 Collections 和 Models 的模式,我不确定我想要实现的目标是否可行。

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

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

    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
}

]

Collection

    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();
});

代码

emps = new Employees();
emps.url("/testURL"); //
emps.sync();

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

因此我可以得出结论,Collection 不够智能,无法从 JSON 响应中实例化一组 Employee 模型。 我该怎么做?

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

您想将您的集合传递给您的 Employees 构造函数,例如

var emps = new Employees(arrayOfEmployees, {model: Employee});

此外,最后一部分(重新指定模型)可能没有必要。

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

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

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

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