親子関係でイベントを設定する場所については疑問に思っています。それは特定の問題ではなく、私が推測するベストプラクティスです。私の具体的なケース:親子ビューのイベントバインディングの関係
私はButton
とList
を含むDropdown
を持っています。アクションを説明するには、ボタンを押すとリストが表示されます。リスト内の項目をクリックすると、その項目が選択され、リストが消えます。
最初は、ビューがDropdown
として初期化されているため、作成する人は、Button
またはList
ビューにアクセスして対処する必要はありません。すべてのメソッドは親ビューで呼び出され、イベントは子プロセスからバブリングされる必要があります。ですから、例えば、代わりにやっての
:this.dropdown.button.press();
、Dropdown
はちょうどButton
のプレスメソッドを呼び出し、独自のpress
方法を提供します。
ユーザがボタンを押すと、Button
は、Dropdown
が聴いているイベントpress
を発生させます。
onButtonPress : function() {
if (!this.isExpanded()) {
this.expand();
}
this.trigger('press');
},
そしてDropdown
開発者がdropdown.button
に到達せずにプレスイベントを取得することができるように、自身にプレスをトリガします。
ここに最初の質問があります。 Dropdown
onButtonPress
で自分自身を展開する必要があるか、onButtonPress
押すだけをトリガする必要があり、その後、拡張がDropdown
に耳を傾けてきた自身のpress
イベント:
onButtonPress : function() {
this.trigger('press');
},
onPress : function() {
if (!this.isExpanded()) {
this.expand();
}
},
そして、それはより複雑になる、はずDropdown
のexpand
方法だけでトリガ自身のexpand
:
expand : function() {
if (this.isEnabled()) {
this.setState('expanded', true);
this.trigger('expand');
}
return this;
},
onExpand : function() {
this.list.show();
},
またはそれがshow
のList
1のようになります。
expand : function() {
if (this.isEnabled()) {
this.setState('expanded', true);
this.list.show();
this.trigger('expand');
}
return this;
},
私は、親子関係のイベントをどこにバインドするかを決めるベストプラクティスについては疑問に思っています。どのように混乱している状況や可能性として循環的なイベントの呼び出しを避けるために。
誰でも意見はありますか?
"ベスト"を決定するには、まず測定基準を定義する必要があります。 – RobG
おそらく、コードを使って作業しているときに、最もパフォーマンスが高く、読みやすく/心に留めているでしょう。 –