0

私がやろうとしていることは次のとおりです。まず、アクティブなサイト ユーザーのリストを読み込みます。これらの各ユーザーは、映画のリストに関連付けられています。ユーザーをクリックすると、そのユーザーの映画のリストが次のメニューに表示されるようにします。しかし、最初の JSON 要求で各ユーザーの完全な映画リストを読み込む代わりに、backbone-relational にパッケージ化されている 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' が呼び出されたときに、ムービーが実際に読み込まれないことです。だから私は私のオプションがここにあるのだろうかと思っています。私が持っていた1つのアイデアは、これをjQueryの遅延オブジェクトにラップすることでした...基本的には、コールバックを使用します。ただし、これを行う方法が正確にはわかりません。また、コールバックの形式を使用することが本当に優れたバックボーン設計であるかどうかもわかりません。

コールバックまたはいくつかの(望ましい)システムを使用して、これを実装する方法を知っている人はいますか? ありがとう!

編集:

deferred を使用してなんとか取得できましたが、deferred を使用しないより優れたバックボーン ソリューションがあるかどうかはまだ疑問です。

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

1 に答える 1

1

ドキュメントを少し見てみると、バインドできるイベントがあるように見えますか?

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

私は Backbone.Relational にあまり詳しくないので、これはうまくいくかもしれませんし、うまくいかないかもしれません...

どちらにしても頑張ってください!

于 2012-05-25T03:32:54.063 に答える