同意しましたが、この種のことには多くの定型文が関係しています。私が試した1つのアプローチは、以下に定義するような(表示)方法を使用してこれを最小化することです。
/**
* Helper to facilitate event-bubbling, that is to say, the scenario where a view
* binds a callback to a child-View event only to retrigger it, mimicking the
* inherent event bubbling mechanism of the DOM. Allows renaming of the bubbled
* event as well as modification of the bubbled arguments
*
* @param view The View-dispatcher of the event
* @param ev Name of the event to bubble
* @param opts A hash of options where:
* bubbleName: New name of the event to bubble in case the event should be
* renamed. Optional
* args: The arguments to bubble:
* - When absent, the original arguments will be bubbled.
* - When set to a non-function value or an array-of-values, this value or
* values will be bubbled
* - When set to a function, it will be invoked on the incoming arguments and
* its returned value will be treated as in the previous case.
*/
bubbleEvent: function (view, ev, opts) {
if (!opts) { opts = {}; }
view.bind(ev, function () {
var inArgs = _.toArray(arguments),
bubbleArgs = _.isFunction(opts.args) ?
opts.args.apply(this, inArgs) : (opts.args || inArgs),
bubbleName = opts.bubbleName || ev;
this.trigger.apply(this, [bubbleName].concat(bubbleArgs));
}, this);
}
これは、他のすべてのビューが拡張するBaseViewのメンバー関数になります。そのため、アプリのすべてのビューで利用できます。したがって、ParentViewが、所有されているchildViewによってトリガーされたイベントを単純にバブルするには、必要なのは
bubbleEvent(childView, "event");
それでも、これはいくつかの定型文を導入するので、私もこの問題に対する他の解決策を見たいと思います。