2017-08-31 1 views
0

J'essaie de transmettre un paramètre supplémentaire à une troisième fonction de rappel (ce n'est pas mon propre rappel).js - passe un paramètre supplémentaire à la fonction de rappel

const selectedItems = dt.rows({ selected: true }); 
const selectedIndexes = selectedItems.indexes(); 
const selectedData = selectedItems.data(); 

let data_object = []; 

$.each(selectedData, (i, o) => { 
    data_object.push(o['PackageName']); 
}); 

window.bridge.deleteApps(data_object, (success_list, selectedIndexes) => { 
    console.log("test"); // selectedIndexes -> undefined 

}); 

Contexte: C'est une fonction qui est fourni avec Qt qui déclenche un procédé de python (de pyqt), le premier param est passé à python le second param est une fonction de rappel avec le retour de la méthode de python (success_list), mais J'ai aussi besoin de selectedIndexes.

Quand je

window.bridge.deleteApps(data_object, (success_list, abc=selectedIndexes) => { 
    console.log("test"); // abc + selectedIndexes is available 

}); 

Je suis désolé que je n'ai pas extrait de travail pour vous de tester, mais je l'ai fait quelques sur callbacks et Essais en réalité ne le comprends pas, donc je ne suis pas en mesure reproduire ce cas.

Répondre

1

Je pense qu'une partie de votre confusion est la façon dont les rappels sont gérés. Fondamentalement, il appartient à la fonction window.bridge.deleteApps de transmettre les paramètres au rappel que vous fournissez. Donc, sauf si vous êtes l'auteur de cette fonction, il n'y a pas de bon moyen de vous faire passer des paramètres supplémentaires. Cependant, dans l'exemple ci-dessus, vous devriez avoir accès à selectedIndexes car vous l'avez déclaré avec const et il sera accessible à partir de votre rappel.

donc vous devriez être en mesure d'avoir ce code:

window.bridge.deleteApps(data_object, (success_list) => { 
    console.log(selectedIndexes); // Should be available because you've declared it in a higher scope 
    console.log(success_list); // Gets passed by the .deleteApss function 
}); 
+0

omg votre raison ... Je suis confus AF, thats ce que j'ai essayé d'abord et iam sûr qu'il a dit 'selectedIndexes est undefined' - .- – FalloutBoy

+0

Si vous utilisez 'const selectedIndexes = selectedItems.indexes();' comme appel pour obtenir une valeur pour 'selectedIndexes', êtes-vous sûr de récupérer une valeur? Pouvez-vous enregistrer ce que 'selectedIndexes' est avant de faire d'autres appels? – stetsmando

+0

Oui, ça fonctionne bien maintenant. Je suis presque sûr d'avoir une erreur 'undefined' quand il accédait à la fonction de rappel hier alors c'est pourquoi je demandais même de l'aide mais maintenant je peux facilement accéder à la variable à l'intérieur du rappel ... donc finalement il n'y a jamais eu problème: S Merci pour votre aide! – FalloutBoy