2010-10-30 3 views
3

Je suis confronté à un défi et je ne sais pas comment résoudre ce problème dans jQuery.JQuery: comment écrire une fonction plugin qui prendra un nom de fonction sous forme de chaîne et l'exécutera?

Mon but est d'écrire une fonction étendue remplaçant la fonction Facebook callSWF.

Facebook callSWF run like that: **domObj.callSWF("myFunctionName", param1, param2 ... paramx);** 

Maintenant, j'ai besoin de remplacer cette fonction. Pour jQuery, je peux appeler Flash via JS comme ça:

if($('#swfObj')[0]) 
{ 
    $('#swfObj')[0].myFunctionName(param1, param2 ...); 
} 
else 
{ 
    $('#swfObj').myFunctionName(param1,param2 ...); 
} 

Cependant, cela signifie que je dois changer pour plus de 50 endroits différents que l'appel précédent « callSWF » et les remplacer par ce bloc de code avec des noms de fonction . Ce n'est pas bon. Par conséquent, je décide d'écrire une extension. idéalement, je peux appeler comme ceci:

$ ('# swfObj'). callSWF ("myFunctionName", param1, param2 ...);

je commence à écrire la fonction et coincé .... voici mon code à ce jour:

(function($){ 
    $.fn.callSWF = function(swfFuncName, param1) { 

if($(this)[0]) 
{ 
    $(this)[0].**swfFuncName**(param1); 
} 
else 
{ 
    $(this).**swfFuncName**(param1); 
} 

return this; 
    }; 
})(jQuery); 

La partie que je ne sais pas comment faire est ... de passer dynamicially dans le nom de la fonction (qui est le nom de la fonction swf). Donc, swfFuncName sera différent en fonction de la fonction flash avec laquelle je vais communiquer.

je peux faire par exemple que:

**$('#swfObj').callSWF("showMyName", 'whatever');** 
**$('#swfObj').callSWF("anotherFunction", 1234);** 
**$('#swfObj').callSWF("yetAnotherFunction", 'kbieure');** 

une idée? Merci.

Répondre

1

La clé est tout simplement d'utiliser ce que la plupart appellent « tableau » syntaxe au lieu de la syntaxe « objet » pour faire référence à la propriété appropriée de $(this)[0] ou $(this) (selon le cas)

if($(this)[0]) 
{ 
    $(this)[0][swfFuncName](param1); 
} 
else 
{ 
    $(this)[swfFuncName](param1); 
} 
+0

Qu'en est-il si le le nombre de param varie? par exemple, certaines fonctions peuvent en avoir une, certaines peuvent en avoir plus d'une ... – murvinlai

+0

cela fonctionne. Je dois juste trouver une meilleure façon de gérer plusieurs paramètres. :) – murvinlai

+0

pour gérer plusieurs paramètres, essayez: 'var elem $ (this); = elem [swfFuncName] .apply (elem, [param1, param2, param3]); 'Lire à propos de [appliquer] (https://developer.mozilla.org/fr/JavaScript/Reference/Global_Objects/function/apply) – Anurag

Questions connexes