关于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模型。 我怎么能这样做?
答案 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});
此外,最后一部分(重新指定模型)可能不是必需的。