проблема с функцией обратного вызова в JavaScript с использованием extjs - PullRequest
2 голосов
/ 29 октября 2010

Мой код обратного вызова (файл js) выглядит примерно так:

function addcontent(Title, tUrl, bURL, Id,purl){

  alert(Id)

  var runcontent = new Ext.Panel({
    id: 'tt' + Id,
    region: 'center',
    autoLoad: {
      url: tUrl, 
      callback: function(el){
        addwindow(el, Id, bURL,purl);
      }, 
      scripts: true, 
      nocache: true
    },
    width: 600,
    collapsible: false
  });
}

function addwindow(el, Id, bURL,purl) {

  //alert(el);
  alert("add buttons   " +{Id);
}

Моя проблема в том, что функция вызова не собирается добавлять окно.Когда я предупреждаю «Id» в addcontent, он отображает, но не addwindow, поскольку элемент управления не перемещается в addwindow.Как я могу отследить / отследить, что является исключением, которое препятствует перемещению элемента управления на addwindow .?

Ответы [ 2 ]

3 голосов
/ 29 октября 2010

Правильный подход к созданию обратного вызова с параметрами - использовать createCallback или createDelegate. Ваши функции (очевидно) выполняются в глобальной области видимости, поэтому это не будет иметь большого практического значения, но createDelegate позволяет вашему обратному вызову выполняться в той же области, что и исходная функция, что обычно делает его лучшим выбором по умолчанию. Так было бы что-то вроде:

autoLoad: {
  url: tUrl, 
  callback: addwindow.createDelegate(this, [Id, bURL,purl]),
  scripts: true, 
  nocache: true
},

Опять же, обратите внимание, что this в вашем случае будет глобальным объектом Window, но это все еще хорошая практика, чтобы сделать то же самое в будущем в методе класса, который будет работать как ожидалось.

2 голосов
/ 29 октября 2010
function addcontent(Title, tUrl, bURL, Id,purl){

  alert(Id)

  var runcontent = new Ext.Panel({
    id: 'tt' + Id,
    region: 'center',
    autoLoad: {
      url: tUrl, 
      callback: addwindow(Id, bURL,purl),
      scripts: true, 
      nocache: true
    },
    width: 600,
    collapsible: false
  });
}

function addwindow(Id, bURL,purl) {

  //alert(el);
  alert("add buttons   " +Id);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...