2011-01-13 2 views
0

Si vous avez un nombre variable de plugins jQuery du format:Comment appliquez-vous une fonction jquery avec le nom de la fonction en paramètre?

(function($){ 
    $.fn.toolSet_themeOne = function() { 
     // params 
    }; 
})(jQuery); 


(function($){ 
    $.fn.toolSet_themeTwo = function() { 
     // params 
    }; 
})(jQuery); 

Lorsque la définition de chaque plug-in n'est pas garanti d'être le même et est susceptible de contenir un certain degré de variation de nom après le trait de soulignement, comment pourrait- ceux-ci soient appliquées dans une situation telle que celle-ci:

var themeApply = function (jQueryCollection, objSettings, pluginName) { 
    // this does not work and reports pluginName is not a function 
    jQueryCollection.pluginName(objSettings); 
    // $.fn[pluginName] is reported as a function 
}; 

Je pensais utiliser another question comme guide, mais ne voient pas comment la portée correctement. Tout pointeur serait grandement apprécié.

Merci :)

EDIT: Pour ceux qui se demandent ce que la fonction est à l'intérieur, ceci est un exemple (appris une autre réponse SO pour laquelle je ne peux pas trouver un refrence immédiat:

(function($){ 

    $.fn.toolSet_themeOne = function() { 

     var methods = [ 
      update: update 
     ]; 

     var init = function (options) { 
      // normal jquery initialisation here 
     }; 

     var update = function (data) { 
      // do something with data 
      // if not initialising, but calling after initialisation 
     }; 

     // what do we do on initialisation? 
     if(arguments.length > 0) { 
    if('string' === typeof(arguments[0]) && 'undefined' !== typeof(methods[arguments[0]])) { 
     var args = Array.prototype.slice.call(arguments); 
     args = args.shift(); 
     methods[arguments[0]].apply(this,args); 
    } else if('object' === typeof(arguments[0])) { 
     init.apply(this, arguments); 
    } 
    } else { 
    init.apply(this, arguments); 
    } 
    return this; 
    }; 
})(jQuery); 

Répondre

0

+0

Salut Yade, j'essaie 2 options pour le moment, la vôtre d'abord avec un exemple: $ ('# tools') [pluginName] (objSettings), et cette seconde: $ .fn [ pluginName] .app ly ($ ('# tools'), objSettings); Je rapporterai dans un moment. – MyStream

+0

[~ quelques minutes plus tard ~] J'ai essayé de me connecter pour vous donner un score - ID ouvert ne fonctionnait pas - Les deux solutions ci-dessus semblent fonctionner - vous étiez sur place. Je ne comprends pas comment ça marche - mais ça marche pour moi :) Merci Yads! – MyStream

+0

@ArcaneErudite Aucun problème, la façon dont vous l'appeliez était de trouver une méthode appelée pluginName sur l'objet jQueryCollection. C'est de la même manière que vous pouvez accéder à une propriété/méthode d'objet en disant obj.property ou obj ["property"] – Vadim

Questions connexes