2016-03-31 10 views
0

異なるパターン...等私は、下記の別の潜在的パターンについて助言する必要があるバックボーン通信、私は仲介者、イベントアグリゲータ、使用して、backbone.eventsについて読んだ

あなたは、これが悪だと思いますか?または良い?注意点/問題点は何か。

この 'パターン'は非常に古典的な問題に答えるものです。 View1で何かをクリックすると、View2がレンダリングされます。 View1とView2は独立しています(これはサブビューのケースではありません)。 View1とView2の間では、「アクション」モジュールを使用します(反応/フラックスに多かれ少なかれ)。ここで

は、擬似コードでプランです:ビューを削除すると

View1: 
    initialize: 
     Actions.subscribe(this, 'view2); 

View2: 
    onclickwtv: 
     Actions.displayView2(); 

Actions: 
    this._Views = []; 
    subscribe(view, viewName): 
     this._Views[viewName] = view; 

    displayView2: 
     this._Views['view2'].render(); // or show or wtv function needed 

我々は_Viewsアレーオフ特定のビューをポップだろうアクションでunsubsribe関数を呼び出します。

このスキームの目的は、(イベントアグリゲーターではなく、それらの相互作用を見るための中心的な場所を持たない)ビュー間の潜在的な相互作用を可視化することです。

これについてのご意見をお待ちしております。

+1

コードレビュー、http://codereview.stackexchange.comの方が適切かもしれません。つまり、私はあなたのソリューションがあまりにも多くのカップリングを持っていると思う。アクションがビューを初期化し、それらを購読した方が良いでしょう。この見解は、行動を知らずに残ることができ、喜んでイベントを撃退することができます。 – 76484

+0

ビューは大部分がルータまたは親ビューで初期化されます –

+0

ご意見ありがとうございます –

答えて

1

私はVIEW2がアグリゲータオブジェクトにイベントをトリガしなければなりません:

onclickwtv: function() { 
    Aggregator.trigger('wtc-click'); 
} 

そして、私はView1をこのイベントにサブスクライブする必要があります:

initialize: function() { 
    this.listenTo(Aggregator, 'wtc-click', this.render); 
} 

アクションを呼び出すことができるようにView1をアクションに加入持ちますView1.render()は、同じことを達成するためのほんの一歩です。あなたのソリューションには3つの意思決定対象があり、私のものは2つしかありません。私のソリューションでは、ビューステートの管理は必要ありません。.remove()メソッドが呼び出されたとき、ビューはアグリゲータのリッスンを停止します。

+0

これは良いです。私は昨日それについて考えていた。また、シングルトンの共有モデルについて考えていましたが、ビューが何らかのデータに反応する必要がある場合、あなたはどう思いますか? –

+0

私はかつてフィルタービューとページビューを持っていて、それぞれが独自のモデルを持っていました。現在のフィルタが変更されたら、現在のページを1に設定する必要がありました。これは、FilterモデルとPaginationモデルをインスタンスとして持つマスターモデルを持つことで実現しました。このマスターモデルは、フィルタモデルを聞き、ページネーションモデルを設定するためのロジックを保持していました。 – 76484

関連する問題