1

問題:

画面に3つのUIコンポーネントがあります。

  1. トップメニュー:オプション(trueまたはfalse)
  2. 左メニュー:A、B、C、Dなどのアイテムのリスト
  3. フォームの内容:フォーム。の値に応じて表示または非表示Top menu's Optionになります。その内部の内容は、選択されているものによって異なりLeft menu's itemます。たとえば、選択したAは2つの入力ボックスを表示し、Bは3つの入力ボックスを表示します。

それが機能する方法は、ユーザーが左側のメニュー項目を選択し、次にトップメニューのオプションをクリックすると、フォームのコンテンツが表示されることです。

トップメニューにはTopMenuモデルがあります

{
isSelected: false
}

左メニューLeftMenuCollectionにはそのようなモデルが含まれています

{
id: 0
label: "No label yet"
}

フォームの内容FormContentModel長すぎてここに入力できません。

私には2つのビューがあります:TopMenuViewLeftMenuViewforTopMenuLeftMenuCollection。ただし、フォームコンテンツビューのビュー(呼び出しましょうFormContentView)は、両方から値を取得するTopMenu必要があります。また、いつ表示されるか、表示された後にLeftMenuCollectionを表示するかを知る必要があります。

現在のアイデア:

  1. 上のユーザーのアクションLeftMenuViewはイベントをトリガーFormContentViewし、選択されているものに応じて非表示のDOMにHTMLを入力します。

  2. TopMenuView表示されるようにトリガーFormContentViewされます

  3. その後FormContentView、独自のに保存されますFormContentCollection

#1と#2については、次のようにPubSubモデルを使用しました。バックボーンで1つのビューから別のビューにイベントを発生させます

しかし、私はバックボーンボイラープレートhttps://github.com/tbranyen/backbone-boilerplateを使用しているので。appオブジェクトはapp.jsですでに作成されているため、これを行うことを計画しています。

app.PubSub = _.extend({}, Backbone.Events)

質問:

そのPubSubオブジェクトをどこでどのように作成しますか?router.jsにありますか?

PubSubはこれを行う正しい方法ですか?TopMenu私も「コンポジットモデル」を組み合わせて考えていましたが、インターネットLeftMenuCollection上のFormContentCollectionほとんどの人がPubSubを使っていると言っていました。

4

1 に答える 1

2

「app」変数を定義したらすぐにpubsubを作成します。

私はPubSubをBackboneオブジェクトに直接アタッチすることを好み、バックボーンがロードされた直後にアタッチします。(私は以前にそれについて書きました:Backbone.jsグローバル通知

もっと簡単かもしれない別のアイデアは次のとおりです。

新しいモデルを作成し、すべてのビュー間で共有します。

(2番目のモデルをビューに追加できることに注意してください。view.modelに設定する必要はありません)

左ビューと上ビューはその属性を.set()でき、フォームビューは.on('change'、function ...)を使用して変更にバインドし、ビューを表示/非表示にすることで応答できます。

于 2012-10-18T12:32:47.063 に答える