1

バックボーンでモデルとビューを使用する正しい方法を明確にしたいと思います。最初に何を使用する必要があり、可能であればその理由。

例:ページに一連の異なる画像を表示するアプリケーションがある場合、クリックすると、名前、説明、色などの画像のみを表示するページが移動します。

使用するためのより良い方法は何でしょうか。

  1. 画像をクリックするとURLが変更され、ルーターがトリガーされ、正しいビューが表示されます。そのビューからモデルをロードします。

  2. クリックイベントを各画像に添付すると、モデルの詳細が変更され、イベントがトリガーされてビューが変更されます。

  3. ルーターを再度使用して、モデルを呼び出してからビューをトリガーします。ただし、モデルを使用して詳細を取得することはできますか。

  4. ルーターでそれらを呼び出し、モデルをビューに渡しますか?繰り返しますが、これはどのように行われますか?

  5. 別の方法

私はバックボーンボイラープレートを使用していますが、少し混乱するかもしれません。しかし、どんな記事や説明も非常に役に立ちます。

4

2 に答える 2

2

私が通常設定する方法は、Backbone.Eventsを多用することです。ビュー内のメソッドにこれらのイベントをバインドすることで、ビュー内のクリック イベントを傍受する傾向があります。次に、そのバインドされたイベントはビュー固有の作業を行い、次に次のようなことを行いthis.trigger("Router_SomeEvent")ます。通常、そのイベントのバインディングは、ルーターでビューが作成される場所で指定されます。

// Begin router snippet...
someRouteMethod: function() {
   this.views.SomeViewInstance = new MyViews.SomeViewClass();
   this.views.SomeViewInstance.bind("Router_SomeEvent", this.onSomeEvent);
},

onSomeEvent: function() {
   this.navigate("NewLocation", { trigger: true });
}
// End router snippet

この種のパブリッシュ/サブスクライブ (pub/sub)パターンを使用すると、コードがより分離され、処理と拡張が容易になります。最初は少し混乱しますが、コツをつかむと、なぜ便利なのかがますます明確になります。私のビューには、レンダリング、UI へのイベント バインディング、および必要に応じてルーターへのイベントのバブリングのためのロジックが含まれているだけですが、ルーターにすべての... まあ... ルーティングを処理させる傾向があります。イベントをモデルにバインドすることもできます。私はモデルをビューと同様に使用する傾向があり、モデルはルーターに何らかの変更を通知し、ルーターは先に進み、ビューの状態を変更したり、他のモデルやコレクションを変更したりしてそのイベントを処理します。

Backbone は非常に強力ですが、習得にはかなりの時間がかかります。Addy Osmani のBackbone Fundamentalsをお勧めします。彼はまた、O'Reilly に関する本を持っています。

于 2012-07-10T17:37:39.410 に答える
0

画像をクリックして URL を変更すると、ルーターがトリガーされ、正しいビューが表示されます。そのビューからモデルをロードします。

ルーターは必ずしも必要ではありません。たとえば、この URL をパーマリンクとして使用し、ユーザーがこのリンクに移動したときに画像の詳細ビューを開く予定がある場合にのみ使用します。

各画像にクリック イベントをアタッチすると、モデルの詳細が変更され、ビューを変更するイベントがトリガーされます。

クリックでモデルを変更したいのはなぜですか? 私が理解していることから、画像のサムを保持するコンテナ、サム画像ビュー、画像詳細ビュー(たとえば、ライトボックスで大きな画像を開く)の3つのビューがあります。コンテナを構築するとき、画像を引数としてコレクションを渡します。コンテナーは、コレクション内の各アイテムのサム イメージ ビューをレンダリングします。各サム ビューにはイメージ モデルがあることに注意してください。クリックすると、画像の詳細ビューが呼び出され、既に持っているモデルが引数として渡されます。この時点では、モデルの変更、ルーティング、またはイベントは実際には関係ありません。

于 2012-07-10T17:45:43.030 に答える