2012-05-24 2 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의 지연 객체로 포장하는 것이 었습니다 ... 기본적으로 콜백을 사용합니다. 나는 정확히 어떻게 해야할지 잘 모르겠다. 콜백 형식을 사용하는 것이 정말 좋은 백본 디자인인지 모르겠다.

누구든지 콜백 또는 일부 (선호) 시스템을 사용하여 구현할 수있는 방법을 알고 있습니까? 감사!

편집 : 관리가

그것이 연기를 사용하려면,하지만 연기하지 않고 더 나은 백본 솔루션이 있다면 난 아직도 궁금하네요.

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 너무 familiary하지 않다, 그래서 이것은 또는 작동하지 않을 수 있습니다 ...

행운 중 하나의 방법!

+0

응답 해 주셔서 감사합니다. 나는 이와 같은 것이 효과가있을 것이라고 생각했지만, 불행히도 실제로 그 일을하지 않는 것 같습니다. 지금은 $ .when을 사용하고 jquery에서 .then을 사용한 다음 collection.each (function (model) {}); 그들을 렌더링합니다. 그것은 솔직히 말해서 가난한 해결책 인 것 같습니다. – bento