Backbone使用嵌套集合获取父模型

时间:2013-04-19 12:11:23

标签: node.js backbone.js model nested fetch

我的应用程序有这样的结构:

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数组而非骨干模型的行为。

如何解析剪辑?

1 个答案:

答案 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数组。