2

div を所有するオブジェクトがありChatHandler、その div には他の dom 要素が含まれています。次に、イベント ハンドラーを、そこに含まれる DOM 要素のサブセットにバインドします。次のようにします。

$(this.element).find('.render-box').unbind('click').click(this.handleBoxClick);

これらのクリックを処理する関数を指定します。

ChatHandler.prototype.handleBoxClick = function(event) {
    // 'this' refers to a DOM object. 
    var partner = $(this).attr('partnerid');
    // But now I want to be able to access a public attribute of this object.
    this.myAttribute = partner;
}

ChatHandler オブジェクトのパブリック メンバー/関数にアクセスするにはどうすればよいですか? 実行コンテキストを変更できないと思いますが、これを行うには何らかの方法が必要です。

4

3 に答える 3

2

ChatHandler オブジェクトを認識しているラッパー関数を介して、要素を明示的に渡します。

thisはオブジェクトを参照し、要素は引き続きパラメーターとして使用できます。

var handler = this;

$(this.element).find('.render-box').unbind('click')
  .click(
    function(event) {
      handler.handleBoxClick(this, event);
    } 
  );

// ...

ChatHandler.prototype.handleBoxClick = function(el, event) {
  var partner = $(el).attr('partnerid');
  this.myAttribute = partner;
};
于 2013-05-05T02:47:38.213 に答える
2

$.proxy値をバインドするために使用しthisます。

$(this.element).find('.render-box')
               .unbind('click')
               .click($.proxy(this, "handleBoxClick"));

thisまたは、ハンドラーでデフォルト値を保持する必要がある場合は、オブジェクトをイベント データとして渡すことができます。

$(this.element).find('.render-box')
               .unbind('click')
               .click(this, this.handleBoxClick);

そしてevent.data、ハンドラで経由してアクセスします。

ChatHandler.prototype.handleBoxClick = function(event) {
    var partner = $(this).attr('partnerid');
    event.data.myAttribute = partner;
}
于 2013-05-05T02:53:58.723 に答える
0

プロトタイプを捨てて、どんなthisキーワードも取り除きます - 混乱するでしょう:

ChatHandler = function() {
    var self = this;
    self.element = document.getElementById("wtv");
    self.myAttribute = undefined;
    self.handleBoxClick = function() {
        var partner = $(self.element).attr('partnerid');
        self.myAttribute = partner;
    }
    $(self.element).find('.render-box').unbind('click').click(self.handleBoxClick);
};

new ChatHandler();
于 2013-05-05T02:43:01.543 に答える