0

私はjQueryとlodashを使用してインターフェースを構築しており、次のように委任されたイベントを使用しています:

function Interface() {
  this.connectEvents();
  _.bindAll(this);
};
_.extend(Interface.prototype, {
  connectEvents : function() {
    this.$clockNav.on('click', '.navprev a', this.previousTime);
  },
  previousTime : function() {
    this.getPreviousTime(this.currentTime);
  }
});

ただし、以前は制御している Interface オブジェクトのインスタンス_.bindAllに結び付けていましたが、jQuery はそのバインディングを上書きし、代わりにクリックした要素に設定します。jQueryがこれを行うのを止めて、の正しい値を保持するにはどうすればよいですか?previousTimethisthis

4

4 に答える 4

1

jQuery.proxyまたはFunction.prototype.bindネイティブ メソッドを使用します。

Interface.prototype.connectEvents = function() {
  this.$clockNav.on('click', '.navprev a', $.proxy(this.previousTime, this));
};

また

Interface.prototype.connectEvents = function() {
  this.$clockNav.on('click', '.navprev a', this.previousTime.bind(this));
};
于 2013-10-23T01:57:51.393 に答える
1

$.proxy()を使用してカスタム コンテキストをイベント ハンドラー コールバックに渡すことができます

Interface.prototype.connectEvents = function() {
  this.$clockNav.on('click', '.navprev a', $.proxy(this.previousTime, this));
};
于 2013-10-23T01:54:00.260 に答える
0

問題は私が思っていたよりもはるかに単純であることが判明しました: 私の初期化関数では、connectEvents前に を呼び出していました_.bindAll。ああ。

于 2013-10-23T01:59:29.123 に答える
0

これにはさまざまな方法があります。まだ言及されていない別の手法は、クロージャーでローカル変数を使用することです。

_.extend(Interface.prototype, {
  connectEvents : function() {
    var self = this;
    this.$clockNav.on('click', '.navprev a', function() {self.previousTime()});
  },
  previousTime : function() {
    var self = this;
    this.getPreviousTime(function() {self.currentTime()});
  }
});
于 2013-10-23T02:01:48.457 に答える