J'essaie de donner à mon plugin la fonctionnalité de rappel, et j'aimerais qu'il fonctionne de manière quelque peu traditionnelle:
myPlugin({options}, function() {
/* code to execute */
});
ou
myPlugin({options}, anotherFunction());
Comment gérer ce paramètre dans le code? Est-il traité comme une entité à part entière? Je suis presque sûr de savoir où je placerais le code exécutoire, mais comment faire exécuter le code? Je n'arrive pas à trouver beaucoup de littérature sur le sujet.
()
Réponses:
Exécutez simplement le rappel dans le plugin:
$.fn.myPlugin = function(options, callback) { if (typeof callback == 'function') { // make sure the callback is a function callback.call(this); // brings the scope to the callback } };
Vous pouvez également avoir le rappel dans l'objet d'options:
$.fn.myPlugin = function() { // extend the options from pre-defined values: var options = $.extend({ callback: function() {} }, arguments[0] || {}); // call the callback and apply the scope: options.callback.call(this); };
Utilisez-le comme ceci:
$('.elem').myPlugin({ callback: function() { // some action } });
la source
$('.elem').myPlugin({ callback: function (param) { // some action } });
options.callback.call(this, param);
animateBefore
etanimateAfter
. s'il vous plaît dites-moi comment utiliser votre solution ??Je ne sais pas si j'ai bien compris votre question. Mais pour la deuxième version: cela appellerait
anotherFunction
immédiatement.Fondamentalement, votre plugin devrait être une sorte de fonction qui ressemble à ceci:
var myPlugin = function(options, callback) { //do something with options here //call callback if(callback) callback(); }
Vous devez fournir un objet fonction comme rappel, donc soit
function(){...}
ouanotherFunction
(sans()
).la source
Ramener une explosion du passé.
A noter que si vous avez deux arguments passés, par exemple:
$.fn.plugin = function(options, callback) { ... };
Ensuite, vous appelez le plugin sans l'argument options mais avec un rappel, vous rencontrerez des problèmes:
$(selector).plugin(function() {...});
J'utilise ceci pour le rendre un peu plus flexible:
if($.isFunction(options)) { callback = options }
la source
Je pense que cela pourrait t'aider
// Create closure. (function( $ ) { // This is the easiest way to have default options. var settings = $.extend({ // These are the defaults. onready: function(){}, //Rest of the Settings goes here... }, options ); // Plugin definition. $.fn.hilight = function( options ) { //Here's the Callback settings.onready.call(this); //Your plugin code goes Here }; // End of closure. })( jQuery );
J'avais partagé un article sur la création de votre propre plugin jQuery Je pense que vous devriez vérifier que http://mycodingtricks.com/jquery/how-to-create-your-own-jquery-plugin/
la source
Changez la fonction de votre plugin pour prendre un deuxième paramètre. En supposant que l'utilisateur passe une fonction, ce paramètre peut être traité comme une fonction normale.
Notez que vous pouvez également faire du rappel une propriété du paramètre options.
Par exemple:
$.fn.myPlugin = function(options, callback) { ... if(callback) //If the caller supplied a callback callback(someParam); ... });
la source
Un exemple un peu tardif, mais cela peut être utile. L'utilisation d'arguments peut créer la même fonctionnalité.
$.fn.myPlugin = function() { var el = $(this[0]); var args = arguments[0] || {}; var callBack = arguments[1]; ..... if (typeof callback == 'function') { callback.call(this); } }
la source