2

私はいくつかの異なるビューを持つBackbone.jsWebアプリケーションに取り組んでいます。ページの上部にAudioPlayerビューがあり、ページの残りのコンテンツが変更されている間、永続的でオーディオを再生する必要があるとします。ページコンテンツの残りの部分は、オンデマンドで切り替えることができる必要があります(ルーターがナビゲートを介してURLを更新します)。

FirstViewを非表示/削除し、SecondViewを挿入してから、ユーザーが[戻る]ボタンをクリックしたときにSecondViewを非表示/削除し、FirstViewを再度挿入/表示する正しい方法を探しています。

ビューが表示されていない場合は、メモリリークを回避するために、ビューを削除する必要があると言われています。これが当てはまる場合、関連付けられたview.elが削除プロセス中に破棄されたため、ビューを再作成する適切な方法は何ですか?または、これを行うためのより論理的な方法はありますか?

4

2 に答える 2

2

これは私がそれをする方法です:

  1. 呼び出されたメソッドを使用してBackbone.Viewを拡張します。このメソッドopenは、ビューをDOMに追加するだけでなく、現在開いているビューにフラグを設定し、同様のcloseプロパティを設定します。
  2. viewsアプリの共通プロパティにすべてのビュープロパティを作成する
  3. clearViews渡されたビュー名を除くすべての開いているビューを閉じるアプリで呼び出されるメソッドを作成します

これが私が使ってきたものの要点(コーヒースクリプト)です。お気軽にコピーしてください。

https://gist.github.com/4597528

したがって、このようにバックボーンを拡張した後、app.views.topNavが指すトップナビゲーションバーを除くすべての開いているビューを閉じた後、バックボーンルートで新しいビューを作成して開くとします。あなたは言うことができます:

app.clearViews('topNav');
app.views.myNewView = new MyView;
app.render().open('body'); // or some other container

DerickBailyのMarionetteやTimBranyenのLayoutManagerのような大規模なプロジェクトには、すばらしいビューとレイアウトマネージャーがいくつかありますが、私の小規模なプロジェクトではやり過ぎのように見えました。

于 2013-01-22T19:21:39.827 に答える
1

私は現在、いくつかのアプリでこれを行っており、タブ付きのインターフェイスで実現しています。これらのインターフェースの例をここで見ることができます:

バックボーンルーターを使用してURLを監視しています。これにより、ユーザーのディープリンク/ブックマークを維持できますが、通常、ビューイベントでタブの変更がトリガーされます。

私の目的のために、チャットウィンドウ、画像ギャラリーウィンドウ、および協調編集ウィンドウを備えたマルチタブアプリがあります。

于 2013-01-22T22:13:29.317 に答える