2010-10-29 14 views
2

我的回調代碼(js文件)回調函數是一樣的東西問題在使用JavaScript ExtJS的

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

我的問題是通話功能是不會addwindow。當我在addcontent中提醒「Id」時,由於控件未移動到添加窗口,因此它正在顯示但不顯示窗口。 如何追蹤/追蹤阻止控件移動到addwindow的異常。

回答

3

正確的方法來使用參數創建回調是使用createCallbackcreateDelegate。你的函數(顯然)在全局範圍內執行,所以它不會有太大的實際區別,但是createDelegate允許你的回調在原始函數的相同範圍內執行,這使得它通常是最好的默認選擇。因此,這將是這樣的:

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

再次注意,你的情況this將是全球Window對象,但是這仍然是一個很好的做法,以進入,這樣做同樣的事情在未來內類方法將按預期工作。

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

回調函數期望第一個參數是'Ext.Element'的一個實例,不是一個字符串,其次是一個布爾值,第三個是XMLHttpRequest。所以是的:-1 – Mchl 2010-10-29 11:19:17

+0

是的。但是,只有當你需要一些額外的數據時,你才需要指定特殊的回調函數。您可以直接在回調中調用任何函數。 – 2010-10-29 11:36:06

+0

而這個聯合的回報將被傳遞給回調選項......稍等一下......它確實有一定道理:D--迴歸投票 - 啊太晚了,你需要編輯你的答案讓我能夠改變我的投票 – Mchl 2010-10-29 12:17:30