解决方案
在我的路线
Myapp.Routes = Backbone.Router.extend({
初始化:函数(){
用户 = 新用户();
user.fetch({用户,
成功:功能(响应){
user.classlist = 新类(response.attributes.classes);
});
}
});
我有一个从我的服务器返回的序列化 json 数组,我正在尝试将嵌套对象放入我的嵌套集合中。
这个答案,我以为会让我到达那里,但我错过了一些东西。
How to build a Collection/Model from nested JSON with Backbone.js
我试图用它填充我的嵌套模型的 json 是
{first_name: "Pete",age: 27, classes: [{class_name: "math", class_code: 42},{class_name: "french", class_code: 18}]}
我创建我的用户模型
MyApp.Models.Users == Backbone.Model.extend({
初始化:函数(){
this.classlist = new MyApp.Collections.ClassList();
this.classlist.parent = this;
}
});
我曾尝试按照另一个页面上的示例,并使用
this.classlist = new MyApp.Collections.ClassList(this.get('classes'));
this.classlist.parent = this;
但是 this.get('classes')
返回未定义。
我也尝试通过 this.attributes.classes 获取类数组,但这也是未定义的。
------------更新以包括重新初始化--------------------
我初始化用户和类的函数位于用户路由中,称为重新初始化。我使用这个函数来获取用户和他们的类并存储对象。
重新初始化:函数(ID){
user = new MyApp.Models.User();
MyApp.editingClasses.url = 'classes/'+id;
MyApp.editingClasses.fetch({
成功:功能(响应){
MyApp.editingClasses.parse(响应);
}
});
新的 MyApp.Views.ClassesInput();
},
如您所见,我正在调用 parse
在成功函数中明确显示,但它没有将类添加到集合中。
我不能包含“集合”,因为出于某种原因我无法在主干中访问它。
返回到主干后的用户模型包括类数组,我试图将其放入 ClassList
收藏。
从 javascript 终端复制的用户模型对象如下所示。
属性:对象
created_at: "2012-01-05T16:05:19Z"
编号:63
类:数组[3]
0:对象
created_at: "2012-01-18T20:53:34Z"
编号:295
教师 ID:63
类代码:42
更新时间:“2012-01-18T20:53:34Z”
class_name:数学
__proto__:对象
1:对象
2:对象
长度:3
__proto__:数组[0]
最佳答案
您可以使用 parse
预处理服务器响应的函数:
MyApp.Models.Users = Backbone.Model.extend({
parse: function(response) {
var classesJSON = response.classes;
var classesCollection = MyApp.Collections.ClassList(classesJSON);
response.classes = classesCollection;
return response;
}
});
var user = new MyApp.Models.Users();
user.fetch();
// You should now be able to get the classlist with:
user.get('classes');
也就是说,另一个问题中建议的方法也应该有效。可能是当您的
initialize
函数被调用,模型还没有填充数据?例如,如果您正在执行以下操作:
var user = new MyApp.Models.Users();
它不会有任何属性可以提供给类列表集合。那会是你的问题吗?
关于backbone.js - 使用嵌套的 json 填充嵌套集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8884731/