var User = Backbone.Model.extend({
defaults : {
"students" : [
{
name : "abc",
grade: "A",
school: "xyz"
}],
"interest":
{
music : "yes"
}
}
});
var UserList = Backbone.Collection.extend({
model : User,
});
var obj = new UserList({"students" : [{name:"Rax", grade: "B", school : "javiers"}, {name:"John", grade: "C", school : "loreto"}], "interest" : {music: "yes"}});
for(var i = 0; i < obj.students.length; i++) {
console.log(obj.students.at(i).get("name"));
console.log(obj.students.at(i).get("grade"));
console.log(obj.students.at(i).get("school"));
}
//i want to iterate over each students detail(name, grade and school) ..but this is giving me error " obj.students is undefined " ..why this error is coming?
答案 0 :(得分:4)
首先,有几个语法错误,所以请查看控制台并修复这些错误。此外,传递给集合的对象在概念上是错误的。
Collection是一个“用户列表”,模型是一个用户。所以,也许你应该改变defaults
数据描述。为用户制作students
数组是没有意义的。
此外,当您创建Collection实例时,您可以使用create
method创建模型,而不是仅仅传入哈希。您可以通过这种方式设计模型,但不能使用Collection。
因此,当你想创建一个用户时,你只传递一个“学生”,也许是这样的(你也必须在你的Collection中加入“url”键,否则它将无效):
var User = Backbone.Model.extend({
defaults : {
"students" : [{
name : "abc",
grade: "A",
school: "xyz"
}],
"interest":{
music : "yes"
}
}
});
var UserList = Backbone.Collection.extend({
model : User,
// `url` is required, otherwise Backbone will throw an error
url : '/something'
});
var userList = new UserList();
var bob = userList.create({
students : [ {
name:'bob',
grade : 'a',
school : '123'
} ],
interest : { music : 'no' }
});
console.log( bob.get('students')[0].grade );
http://jsbin.com/elusey - 点击“编辑”,查看代码和控制台。你应该看到“a”作为输出。
你实际上可以简化模型(正如我所说,上面描述的数据结构对单个用户来说没有意义):
var User = Backbone.Model.extend({
defaults : {
name : "abc",
grade : "A",
school : "xyz"
interests : ["music"]
}
});
<强> UPD 即可。实际上,您不必使用create
集合方法来将模型添加到集合中。当你创建一个集合的实例时,你可以传入一个模型数组,就像这样(注意差异,在你的代码中你将一个对象传递给一个集合,但实际上你需要传递一个数组,即使有一个对象在其中):
var userList = new UserList([{
name:'bob',
grade : 'A',
school : '123',
interests : [ "music" ]
},{
name:'george',
grade : 'B',
school : '321',
interests : [ "drugs" ]
}]);
你可以在这里找到使用这种方式添加模型的工作示例(不要忘记查看控制台):http://jsbin.com/elusey/2/edit
答案 1 :(得分:1)
您确定用户“有很多”学生吗?这没有多大意义。但是,如果是这种情况,则应为学生模型和学生集合添加定义。比,您的用户模型应该包含学生集合,以及set()
方法中的一些逻辑,以将学生数组转换为学生集合。如果您想更优雅地处理嵌套在模型下的集合/模型,请查看Backbone-relational。