app.myView = Backbone.View.extend({
events: {
'mouseenter .myitem': 'myfunction'
}
});
このイベントの作成を特定の時間まで、または作成することを決定するまで遅らせるにはどうすればよいですか。現在、ビューが読み込まれるとすぐに作成され、.myitem に入るとすぐに mouseevent がトリガーされます
app.myView = Backbone.View.extend({
events: {
'mouseenter .myitem': 'myfunction'
}
});
このイベントの作成を特定の時間まで、または作成することを決定するまで遅らせるにはどうすればよいですか。現在、ビューが読み込まれるとすぐに作成され、.myitem に入るとすぐに mouseevent がトリガーされます
いつでも手動で作成できます(events
オブジェクトの使用は単なるショートカットです)。
// call this somewhere once you're ready to attach the callback method
this.$el.on(eventName, _.bind(method, this));
またはあなたの例で:
this.$el.on('mouseenter .myitem', _.bind(this.myfunction, this));
バックボーンは、以下を使用してビュー イベントをバインドしますdelegateEvents
。
デリゲートイベント
delegateEvents([events])
jQuery の
on
関数を使用して、ビュー内の DOM イベントの宣言型コールバックを提供します。イベントハッシュが直接渡されない場合はthis.events
、ソースとして使用します。
[...] delegateEvents
が再度実行されると、おそらく別のハッシュで、すべてのコールバックが削除され、新たに委任されます。これは、異なるモードでは異なる動作をする必要があるビューに役立ちます。events
delegateEvents
イベントバインディングを変更したいときはいつでも呼び出すことができます。したがって、これを行う 1 つの方法は、次のように調整this.events
して呼び出すことthis.delegateEvents()
です。
add_event: function() {
this.events = _({}).extend(this.events, {
'mouseenter .myitem': 'myfunction'
});
this.delegateEvents();
}
ビューのプロトタイプを添付したままにして、変更するだけextend
なので、呼び出しは良い考えです:Backbone.View.extend
events
this.events
this.events['mouseenter .myitem'] = 'myfunction';
events
ビューのすべてのインスタンスを変更します。これの利点は、呼び出しundelegateEvents
が正しいことを行い、すべてのビュー イベントが同じ方法で処理されることです。