問題:
画面に3つのUIコンポーネントがあります。
- トップメニュー:オプション(trueまたはfalse)
- 左メニュー:A、B、C、Dなどのアイテムのリスト
- フォームの内容:フォーム。の値に応じて表示または非表示
Top menu's Option
になります。その内部の内容は、選択されているものによって異なりLeft menu's item
ます。たとえば、選択したAは2つの入力ボックスを表示し、Bは3つの入力ボックスを表示します。
それが機能する方法は、ユーザーが左側のメニュー項目を選択し、次にトップメニューのオプションをクリックすると、フォームのコンテンツが表示されることです。
トップメニューにはTopMenu
モデルがあります
{
isSelected: false
}
左メニューLeftMenuCollection
にはそのようなモデルが含まれています
{
id: 0
label: "No label yet"
}
フォームの内容がFormContentModel
長すぎてここに入力できません。
私には2つのビューがあります:TopMenuView
とLeftMenuView
forTopMenu
とLeftMenuCollection
。ただし、フォームコンテンツビューのビュー(呼び出しましょうFormContentView
)は、両方から値を取得するTopMenu
必要があります。また、いつ表示されるか、表示された後に何LeftMenuCollection
を表示するかを知る必要があります。
現在のアイデア:
上のユーザーのアクション
LeftMenuView
はイベントをトリガーFormContentView
し、選択されているものに応じて非表示のDOMにHTMLを入力します。TopMenuView
表示されるようにトリガーFormContentView
されます。その後
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を使っていると言っていました。