以下是我尝试做的事情:我首先加载一个活动网站用户列表,每个用户都与一组电影相关联。当我点击一个用户时,我希望他的电影列表显示在下一个菜单上。但是,我没有在初始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"));
});
}
答案 0 :(得分:1)
在查看文档时,看起来可能有一个可以绑定的事件?
var user = new User({ name: 'User 1' } );
user.bind( 'add:movies', function( model, coll ) {
// Maybe this will work?
});
我对Backbone.Relational不太熟悉,所以这可能会或可能不起作用......
祝你好运!