2012-02-22 7 views
7

バックボーンを使用したことは初めてのことであり、非常に単純なアプリケーションです。基本的にClientsClientItemsがあります。私はすべてのクライアントを表示するビューを持っています。クライアントをクリックすると、ClientItemsに移動します。このClientItemsビューに移動すると、クライアントビューが非表示になり、クライアントはClientItemsを非表示にする必要があります。さて、各ビューの私のrender()機能では、コレクションを通過し、動的にページに追加します。私が2つの間を行き来するとき(戻るボタンを使用して)、すべてのデータがページにあり、隠されているので、完全に再レンダリングする必要はありません。この論理はどこに行くべきですか?今、私はrender()の機能の中にそれを持っていますが、それはちょっと感じます、これを処理するのに好ましい方法は何ですか?レンダリングビューのベストプラクティスを表示/非表示にするバックボーン

答えて

11

私たちは、アプリケーション全体で使用されるいくつかの一般的な機能を持つグローバル変数Appを使用している:

var App = { 
    initialize : function() { 

     App.views = { 
      clientView : new ClientsView(), 
      clientItemView : new ClientsItemsView() 
     } 
    }, 

    showView: function(view){ 
     if(App.views.current != undefined){ 
      $(App.views.current.el).hide(); 
     } 
     App.views.current = view; 
     $(App.views.current.el).show(); 
    }, 

    ... 
} 

そして私は、アプリケーションの他の部分からこのAppを使用します。

App.showView(App.views.clientView); 
+0

いいね。私はあなたが 'initialize'でバットからすぐにビューを作成するのを見ます。これは一般的なことですか?コレクションでも同じことをしますか?私は今のところどちらかの一つのインスタンスが必要になるだけだから私には意味があるが、まだ学んでいる。 – Brandon

+1

私たちはすぐにビューを作成しているだけで、他のすべてのものは必要なときに作成されます。もちろん、最初に必要なときはrequire.jsとinitビューを追加することができます。 –

+0

App.views.current.show()を使用して、表示に関する追加ロジックがそこで実行できるようにします(変更される他のイベントリスナーが存在する可能性があります) –

5

IntoTheVoidのソリューションは良いです - ビューを表示/非表示する場所が1つあることはうれしいことです。しかし、どのようにロジックをアクティブにしますか?

私の経験では、ルータはこれに最適な場所です。ルートが変更され、適切な関数が呼び出されると、アクティブな表示可能なビューを更新する必要があります。

一度に複数のビューを表示する必要がある場合はどうすればよいですか?ルートが変更されたときに常に変更されるプライマリビューと、複数の補助的なスティッキビューがある場合は、心配する必要はありません。しかし、それよりも複雑な場合は、すべての関連ビューをelノードを含むビューにきちんとまとめるComboViewを作成することを考えてください。そのようにしても、上記のロジックはまだ機能し、ルーターの機能には現時点でどのビューが表示されているかを管理するロジックが組み込まれていません。

関連する問題