How to convert an array to Collection in backbone

2019-05-21 21:55发布

问题:

I have an array defined as:

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

I'm trying to convert it to a Backbone Collection as:

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

It gives me the list but for 2 digit numbers, it shows something like this:

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

I'm not able to understand as to what is wrong here or is it the wrong way I'm converting my array to collections. Please suggest. Thanks in advance!

回答1:

A Backbone collection expects a list of models/hashes of attributes that can be converted to a model but you have a plain array.

You will have to transform your array to a list of hashes. Assuming your values are the ids of your models :

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


回答2:

Backbone.Collection expects a list of models or objects (because they can be converted to Backbone.Model). In order to persist the array you have to convert those primitives into objects. Use Backbone.Collection.parse and _.map to turn your array of primitives into an array of objects:

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

Now you can instantiate your Collection with an array:

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

Example: JSFiddle