如何将数组转换为骨干中的Collection

时间:2015-07-22 07:47:43

标签: javascript arrays backbone.js backbone-collections

我有一个数组定义为:

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

我正在尝试将其转换为Backbone Collection:

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

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

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

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

2 个答案:

答案 0 :(得分:3)

Backbone集合需要一个可以转换为模型的属性模型/哈希列表,但是您有一个普通数组。

您必须将数组转换为哈希列表。假设您的值是模型的id

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

答案 1 :(得分:0)

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;
  }
});

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

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

示例: JSFiddle