2012-05-24 156 views
0

以下是我正在嘗試執行的操作:我首先加載活動站點用戶的列表,並且每個用戶都與一系列影片關聯。當我點擊一個用戶時,我想讓他的電影列表出現在下一個菜單上。但不是在初始JSON請求中爲每個用戶加載完整的電影列表,我試圖使用與backbone-relational一起打包的model.fetchRelated(「key」)選項來執行一些延遲加載。backbone.js在模型中填充嵌套數組中的集合

在我看來,我有一個事件偵聽器:

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( 「電影」)是一個異步事件,所以當調用'add'時,電影實際上並未加載。所以我想知道我的選擇在這裏。我有一個想法是以某種方式將其包裝到jQuery的延遲對象中...基本上,使用回調。但我不確定如何做到這一點,而且我不確定使用回調形式是否真的是很好的Backbone設計。

有誰知道我可以如何實現這一點,要麼使用回調或一些(優選)系統?謝謝!

編輯:

我設法得到它使用延遲,但我仍然不知道是否有更好的解決方案骨幹沒有推遲。

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

回答

1

在通過文檔找了一下,看起來有可能是你可以綁定到一個事件?

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

我不Backbone.Relational TOO家族性,所以這可能會或可能無法正常工作......

好運無論哪種方式!

+0

感謝您的回覆。我認爲這樣的事情可能會起作用,但不幸的是,它似乎並沒有真正做到這一點。現在我已經使用$ .when和.then從jquery,然後拉一個collection.each(function(model){});呈現它們。說實話,這似乎是一個糟糕的解決方案。 – bento