我想通过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
}
]
答案 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();
});