使用extjs在javascript中使用回调函数的问题

时间:2010-10-29 09:55:06

标签: javascript extjs callback

我的回调代码(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);
}

我的问题是调用函数不会添加窗口。当我在addcontent中警告“Id”时,它正在显示但不是addwindow,因为控件没有移动到addwindow。 如何跟踪/跟踪阻止控件移动到addwindow的异常是什么。?

2 个答案:

答案 0 :(得分:3)

使用params创建回调的正确方法是使用createCallbackcreateDelegate。您的函数(显然)在全局范围内执行,因此它不会产生太大的实际差异,但createDelegate允许您的回调在与原始函数相同的范围内执行,这使其成为通常的最佳默认选择。所以它会是这样的:

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

再次注意,你的案例中的this将是全局的Window对象,但这仍然是一个很好的做法,以便将来在类方法中做同样的事情将按预期工作

答案 1 :(得分:2)

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);
}