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);
});
关于 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);
});