我的应用程序有这样的结构:
Project (model)
-> tracks (collection)
-> track (model)
-> clips (collection)
clip (model)
我只需要获取父项目模型。它将导致所有数据结构的变化。我得到JSON
{ "_id" : "123",
"name" : "name",
"tracks" : [ { "clips" : [ { "audioName" : "audio name",
"audioPath" : "audio/path.wav",
"duration" : 123,
"id" : "track0-1"
} ],
"mute" : false,
"name" : "track0",
"selected" : false,
"volume" : 100
},
{ "clips" : [ ],
"mute" : false,
"name" : "track1",
"selected" : false,
"volume" : 100
}
]
}
我有解析方法:
parse: function (data) {
this.get('tracks').reset(data.tracks);
delete data.tracks;
return data;
}
我无法解析剪辑。在模型轨道中,属性剪辑具有类似javascript数组而非骨干模型的行为。
如何解析剪辑?
答案 0 :(得分:0)
parse
仅用于解析来自服务器的响应。因此,您将无法使用它来创建clips
集合
所以你可能想要改变你的方式(也许看看Backbone-relational,我认为它处理这种东西)。这是一个可能的解决方案(将放入您的模型中):
initialize: function() {
this.listenTo(this, 'change:clips', this.onChangeClips);
// the rest of your stuff
},
onChangeClips: function() {
var clips = this.get('clips');
if(Object.prototype.toString.call(clips) === '[object Array]')
this.set('clips', new Clips(clips), {silent: true});
}
来源测试数组:Check if object is array?
注意:这将删除对现有集合(您似乎拥有)的任何引用,因此您可能希望在模型中保留对集合的引用(例如在_clips
属性中)以重置它使用新的clips
数组。