JSON不会直接填充主干集合

时间:2013-08-19 15:13:24

标签: backbone.js backbone-collections

我有从服务器返回的JSON,我正在用它填充Backbone集合。

模型

Person = Backbone.Model.extend({

});

PersonCollection = Backbone.Collection.extend({
    model: Person
});

例如JSON -

var jsonString = "[
  { \"name\": \"Anna\", \"id\": 5 },
  { \"name\": \"Lina\", \"id\": 26 },
  { \"name\": \"Melissa\", \"id\": 55 }    
]"

var people = JSON.parse(jsonString); //people is now an array of 3 persons

使用:

var personCollection = new PersonCollection();
for (var i = 0; i < people.length; i++) {
    personCollection.add(people[i]);
}
var personCollectionView = new PersonCollectionView({ collection:  personCollection});

不起作用:(

var personCollectionView = new PersonCollectionView({ collection:  people});

我的JSON正在返回一个模型数组,我不知道为什么我不能将这个数组直接传递给PersonCollectionView?我是否需要在PersonCollection的parse方法中做些什么,这样当给定一个模型数组时,它会将它转换为模型集合?

我确定我错过了什么。有人可以指出那是什么吗?

2 个答案:

答案 0 :(得分:5)

您未正确创建收藏对象,请将new关键字删除为:

PersonCollection = Backbone.Collection.extend({
    model: Person
});

然后,您可以创建JSON对象并将其传递给集合:

var people = JSON.parse(jsonString);
var personCollection = new PersonCollection(people);

请注意,JSON.parse使用小写,jsonString语法不正确:

var jsonString = "[  { \"name\": \"Anna\", \"id\": 5 },  { \"name\": \"Lina\", \"id\": 26 },   { \"name\": \"Melissa\", \"id\": 55 }    ]";

查看有效的演示here

答案 1 :(得分:1)

在第二种情况下,people不是正确的Backbone集合(除非您省略了定义它的代码)。如果它只是一个JSON数组,请先创建集合

var personCollection = new PersonCollection(people);

然后在创建视图时使用该集合

var personCollectionView = new PersonCollectionView({collection: personCollection});