1

我有从服务器返回的 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 方法中做些什么,这样当给定一个模型数组时,它将把它转换成一个模型集合?

我确定我错过了一些东西。有人能指出那是什么吗?

4

2 回答 2

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 }    ]";

在此处查看工作演示。

于 2013-08-19T15:24:35.743 回答
1

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

var personCollection = new PersonCollection(people);

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

var personCollectionView = new PersonCollectionView({collection: personCollection});
于 2013-08-19T16:00:13.093 回答