0

我的应用程序具有以下结构:

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 数组而不是骨干模型。

如何解析剪辑?

4

1 回答 1

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

测试是否数组的来源:检查对象是否为数组?

注意:这将删除对现有集合(您似乎拥有)的任何引用,因此您可能希望在模型中保留对您的集合的引用(如在_clips属性中)以使用新clips数组重置它。

于 2013-04-19T12:29:00.803 回答