如何在 backbone 中将数组转换为 Collection

How to convert an array to Collection in backbone

我有一个数组定义为:

this.noOfHouseHold = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20"];

我正在尝试将其转换为 Backbone 集合,如下所示:

var adultListCollection = new Backbone.Collection(this.noOfHouseHold);

它给了我列表,但对于 2 位数字,它显示如下:

attributes: Object
0: "1"
1: "1"

我无法理解这里出了什么问题,或者是我将数组转换为集合的方式不对。请建议。提前致谢!

Backbone 集合需要一个 models/hashes 属性列表,这些属性可以转换为模型,但您有一个普通数组。

您必须将数组转换为散列列表。假设您的值是模型的 ids :

var lst = _.map(this.noOfHouseHold, function(val) {
    return {id: val};
});
var adultListCollection = new Backbone.Collection(lst);

Backbone.Collection 需要模型或对象列表(因为它们可以转换为 Backbone.Model)。为了保留数组,您必须将这些基元转换为对象。使用 Backbone.Collection.parse_.map 将基元数组转换为对象数组:

var AdultListCollection = Backbone.Collection.extend({
  parse: function (noOfHouseHold) {
    var res = _.map(noOfHouseHold, function (n) {
        return {id: n};
    });
    return res;
  }
});

现在您可以使用数组实例化您的集合:

var adultListCollection = new AdultListCollection(this.noOfHouseHold, {parse: true});

示例: JSFiddle