2010-10-29 12 views
2

Mon code de rappel (fichier js) est quelque chose commeavec fonction de rappel en utilisant 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); 
} 

Mon problème est la fonction d'appel ne va pas addWindow. Lorsque j'alert "Id" dans addcontent, il affiche mais pas addwindow car le contrôle ne se déplace pas vers addwindow. Comment puis-je tracer/suivre quelle est l'exception qui empêche le contrôle de se déplacer sur addwindow.?

Répondre

3

L'approche propre à la création de la fonction de rappel avec params est d'utiliser createCallback ou createDelegate. Vos fonctions sont (apparemment) exécutées dans une portée globale, donc cela ne ferait pas beaucoup de différence pratique, mais createDelegate permet à votre callback de s'exécuter dans la même portée que la fonction d'origine, ce qui en fait le meilleur choix par défaut. Donc, ce serait quelque chose comme:

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

Encore une fois, notez que le this dans votre cas sera l'objet global de la fenêtre, mais cela reste une bonne pratique d'entrer dans de telle sorte que faire la même chose à l'avenir dans Une méthode de classe fonctionnera comme prévu.

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

La fonction de rappel s'attend à ce que le premier argument soit une instance de 'Ext.Element', pas une chaîne, la seconde étant une valeur booléenne, et la troisième étant une requête XMLHttpRequest. Alors ouais: -1 – Mchl

+0

Oui. Mais vous devez spécifier une fonction de rappel spéciale uniquement si vous avez besoin de données supplémentaires. Vous pouvez directement appeler n'importe quelle fonction dans le rappel. –

+0

Et le retour de cette onction sera passé à l'option de rappel ... attendez un moment ... cela a du sens: D - annuler le vote - ah trop tard, vous auriez besoin de modifier votre réponse pour moi de pouvoir pour changer mon vote – Mchl