Мне нужно получить доступ к контексту события И контексту объекта в обработчике события - PullRequest
0 голосов
/ 22 декабря 2011

У меня есть этот фрагмент кода:

function ActivityDialog(_divId, _title) {

    function addButton() {
      var buttonElement = document.createElement('input');
      buttonElement.setAttribute('type','button');
      buttonElement.setAttribute('class','button');
      buttonElement.setAttribute('id','updateButton-' + id););
      buttonElement.onclick = this.updateAction;
    };

    function updateAction() {
      var buttonId = this.id; // correct: this is the Button
      this.sendUpdateRequest(stringUrl); // not defined: Need to reference the current ActivityDialog!!!    
    };

    function sendUpdateRequest(url) {
      // something...
    };

}

Как вы можете видеть, проблема в том, когда я вызываю функцию sendUpdateRequest;, как я могу одновременно получить информацию о кнопке и вызвать функцию

1 Ответ

1 голос
/ 22 декабря 2011

Вы можете попробовать это ...

function ActivityDialog(_divId, _title) {

    // Store the ActivityDialog context
    var self = this;

    function addButton() {
      var buttonElement = document.createElement('input');
      buttonElement.setAttribute('type','button');
      buttonElement.setAttribute('class','button');
      buttonElement.setAttribute('id','updateButton-' + id););
      buttonElement.onclick = this.updateAction;
    };

    function updateAction() {
      var buttonId = this.id;
      self.sendUpdateRequest(stringUrl); // <--------------------- 
    };

    function sendUpdateRequest(url) {
      // something...
    };

}

Поскольку вы используете updateAction в качестве обработчика событий, вы правильно видите, что this будет кнопкой, которая генерирует событие. Сохранение исходного контекста ActivityDialog позволит вам поддерживать доступ к нему даже в обработчиках событий.

...