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

时间:2015-05-26 13:51:57

标签: json backbone.js backbone-collections

关于Backbone用于集合和模型的模式,我不确定我想要实现的是什么。

我希望Collection通过发出一个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
}

集合

    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模型。 我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

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

如果您的API没有响应GET /someurl,那么您需要覆盖的是sync方法。阅读资料来了解它是如何运作的。

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

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

答案 1 :(得分:0)

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

您希望将集合传递给Employees构造函数,例如

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

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