backbone.js从模型中的嵌套数组填充集合

时间:2012-05-24 18:17:43

标签: jquery backbone.js callback backbone-relational

以下是我尝试做的事情:我首先加载一个活动网站用户列表,每个用户都与一组电影相关联。当我点击一个用户时,我希望他的电影列表显示在下一个菜单上。但是,我没有在初始JSON请求中为每个用户加载完整的电影列表,而是尝试使用与骨干关系打包的model.fetchRelated(“key”)选项进行一些延迟加载。

在我看来,我有一个事件监听器:

events: {
    'click .username': 'showMovies'
},
showMovies: function(event){
    event.preventDefault();
    this.model.select();
}

在我的模型中我有一个选择功能:

select: function(){
    this.set({selected: true});
    this.fetchRelated("movies");
    var usermovies = new UserMovieCollection(); 
    usermovies.add(this.get("movies"));     
}

问题是this.fetchRelated(“movies”)是一个异步事件,所以当调用'add'时,实际上并没有加载电影。所以我想知道我的选择是什么。我有一个想法是以某种方式将其包装成jQuery的延迟对象...基本上,使用回调。我不确定如何做到这一点,我不确定使用一种形式的回调是否真的很好的Backbone设计。

有没有人知道如何使用回调或某些(更好的)系统来实现这一点?谢谢!

编辑:

我已经设法使用延迟,但我仍然想知道是否有更好的骨干解决方案没有延期。

select: function(){
        var model = this; 
        var usermovies = new UserMovieCollection();
        $.when(this.fetchRelated("movies")).then(function(){
            console.log(model.get("movies"));
        });
    }

1 个答案:

答案 0 :(得分:1)

在查看文档时,看起来可能有一个可以绑定的事件?

var user = new User({ name: 'User 1' } );
user.bind( 'add:movies', function( model, coll ) {
    // Maybe this will work?
});

我对Backbone.Relational不太熟悉,所以这可能会或可能不起作用......

祝你好运!