1
app.myView = Backbone.View.extend({
   events: {
   'mouseenter .myitem': 'myfunction'
   }    
});

このイベントの作成を特定の時間まで、または作成することを決定するまで遅らせるにはどうすればよいですか。現在、ビューが読み込まれるとすぐに作成され、.myitem に入るとすぐに mouseevent がトリガーされます

4

2 に答える 2

2

いつでも手動で作成できます(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));
于 2013-02-11T00:16:33.993 に答える
2

バックボーンは、以下を使用してビュー イベントをバインドします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.extendeventsthis.events

this.events['mouseenter .myitem'] = 'myfunction';

eventsビューのすべてのインスタンスを変更します。これの利点は、呼び出しundelegateEventsが正しいことを行い、すべてのビュー イベントが同じ方法で処理されることです。

デモ: http://jsfiddle.net/ambiguous/Bd4SB/

于 2013-02-11T01:01:24.007 に答える