如何使用level-list属性处理Backbone.js集合

时间:2012-08-09 14:20:39

标签: backbone.js backbone.js-collections

我想通过Backbone.js模型概念找到使用以下JSON(信号值)的最佳方法:

{
    frequency: "1/1",
    items: [
        {
            value: 1,
            quality: 5
        },
        {
            value: 0.5,
            quality: 5
        }
        ]
}

到目前为止,我只看到Backbone.Collections可用于没有level-list属性的对象(例如:frequency),如下所示:

[
    {
        value: 1,
        quality: 5
    },
    {
        value: 0.5,
        quality: 5
    }
] 

2 个答案:

答案 0 :(得分:1)

您可以将items数组作为自己的集合。

这是一些示例代码

SignalItem = Backbone.Model.extend({
  defaults: {
    value: 0,
    quantity: 0
  }
});

SignalItemCollection = Backbone.Collection.extend({
  model: SignalItem
});

Signal = Backbone.Model.extend({
  initialize: function() {
    // convert the items JSON array into a Backbone collection
    this.get('items') = new SignalItemCollection(this.get('items'));
  }
});

var signal = new Signal({
  frequency: 1,
  items: [
    {
      value: 1,
      quality: 5
    }, {
      value: 2,
      quality: 3
    }
   ]
});

signal.get('frequency') === 1;
signal.get('items').models[0].get('quality') === 5;

答案 1 :(得分:0)

您可以为每个信号使用骨干模型,然后将模型分组,并具有“频率”的集合属性。像这样:

var Model_Signal = Backbone.Model.extend({

   defaults: {
      value: 0,
      quality: 0
   },

   initialize: function(){

      // Do some initializing.
      // you'll probably want to set the
      // model's defaults here.

   }

});


var Collection_Signals = Backbone.Collection.extend({

   frequency: null,

   model: Model_Signal,

   calculateFrequency: function(){

      // You'll probably want to do this every time you
      // add a new signal to this collection.

   }

});

然后,您可以遍历JSON对象,实例化新模型并将它们添加到集合中。

var jsonObject = {
   frequency: "1/1",
   items: [
    {
        value: 1,
        quality: 5
    },
    {
        value: 0.5,
        quality: 5
    }
    ]
};



// Instantiate the collection
var signalCollection = new Collection_Signals();

_.each(jsonObject.items, function(item){

  var signalModel = new Model_Signal({value: item.value, quality: item.quality});
  signalCollection.add(signalModel);
  signalCollection.calculateFrequency();

});