每个型号有多个数据源

时间:2014-03-16 10:04:39

标签: backbone.js

我有一个集合,代表从url .fetch()加载的电影列表。此网址会返回摘要信息的电影列表,例如movieidmoviename。然后,我想根据此集合中的movieid从另一个URL加载有关此电影的更多信息。

所以我的第一个网址(http://movieapi.com/popular)回复说:

{ 
    "movies": [ { "movieid": "1234", "moviename": "Iron Man" } ]
}

然后我想为集合http://movieapi.com/movie/ {movieid}中的每个模型加载,并回复说:

{
    "cover_img": "blahblah",
    "rating": "10/10"
}

如何将这两个数据集合并为一个可以通过集合轻松加载的模型?

1 个答案:

答案 0 :(得分:2)

保持关注点分离是一种很好的做法。 所以,我建议你做以下事情:

  1. MoviesCollection =>应该是MovieModel的集合。它应该只从源URL加载电影数组。
  2. MovieModel应该进行提取以获取其他数据。 您可以在模型的initialize函数中添加一个侦听器,它将触发“fetch”方法。
  3. 电影的模型负责获取 其他数据:

    var Movie = Backbone.Model.extend({
        url: function() {
            return 'http://movieapi.com/movie/' + this.movieid;
        },
    
        initialize: function(){
            this.fetch();
        }
    });
    

    电影集合可用于获取ID为

    的电影列表
    var Movies = Backbone.Collection.extend({
        model: Movie,
    
        url: 'http://movieapi/popular',
    
        // need to intercept the response since the array of movies
        // is nested inside the response
        parse: function(res) {
            if (res && res.movies) {
                return res.movies;
            }
        }
    });