1

またはコレクションthree different viewsに関連するものを表示する必要があります。 このタスクを実行するために、次のコードを記述しました。(*) それがこれを作る正しい方法であるかどうか教えてください、とにかくそれはうまくいきます。three different model

ここに私の問題があります。
このビューの1つでは、たとえば、これに関連するすべてのデータを削除するように注意するサーバーに対してfirstView、を実行することが可能です。DELETE requestthree view

次に、3つのビューを削除する必要がfirstViewありますが、他の2つのビューにアクセスできません。

1)このタスクを実行するにはどうすればよいですか?
2)実装を再設計/改善する必要がありますか?


(*)

// module for display three different views

define([
    "js/views/01View",
    "js/views/02View",
    "js/views/03View"
], function (FirstView, SecondView, ThirdView) {

    var MainView = Backbone.View.extend({

        initialize: function ()
        {
            this.render();
        },

        render: function ()
        {
            var movie_id = this.options.movie_id;
            this.firstView = new FirstView(movie_id);
            this.secondView = new SecondView(movie_id);
            this.thirdView = new ThirdView(movie_id);
        }
    });    

    return MainView;
});

PS:

_idは、コレクションまたはモデルのurlパラメーターを作成するために使用されます

url1: http://localhost/movie/movie_id   (model1)
url2: http://localhost/movie/movie_id/followers   (collection2)
ulrs: http://localhost/movie/movie_id/feeds (collection3)

model1を削除すると、collection2とcollection3に関連するview2とview3が削除されます。

4

2 に答える 2

1

Viewsダイレクト メソッド呼び出しではなく、イベントに応答する必要があります。EventAggregatorすべてのビューから共通のアクセス可能なものを作成するか(@ 20100が彼の回答で説明したように)、共通のモデルを介してビューを接続し、各ビューで独自のより興味深いイベントをリッスンするようにします。

あなたの場合、ビューのインスタンス化から Movie モデルをインスタンス化し、その周りに 3 つのビューを接続できます。

// code simplified and not tested
var MainView = Backbone.View.extend({
  initialize: function ( opts ) {
    this.movie = new Movie({ id: this.opts.movie_id} )
    this.movie.fetch();
    this.render();
  },

  render: function () {
    this.firstView = new FirstView( this.movie );
    this.secondView = new SecondView( this.movie );
    this.thirdView = new ThirdView( this.movie );
  }
});

var ThirdView = Backbone.View.extend({
  initialize: function( opts ) {
    this.movie = opts.movie;
    this.movie.on( "destroy", this.cleanUp, this )
    this.followers = // fetch the followers as you do now, use this.model.id
  }

  cleanUp: function(){
    // your clean up code when model is detroyed
  }
});
于 2012-05-15T14:54:59.857 に答える
1

コメントの会話に基づいて問題を解決するために、バックボーン アーキテクチャはイベントを使用して展開するため、イベント アグリゲータを使用してイベントを送信しない理由はありません。バックボーン コンストラクトに限定しないでください。バックボーンであるビューから別のビューにイベントを発生させるこのパターンは、問題に対する洗練されたソリューションを提供します。

于 2012-05-15T14:41:22.273 に答える