J'ai eu le même problème. Ces réponses sur des sujets connexes n'ont pas non plus fonctionné pour mon cas. Je l'ai résolu en rond en utilisant des événements.
L'exemple ci-dessous illustre l'appel d'une fonction qui multiplie trois valeurs de données internes par un multiplicateur donné et renvoie le résultat. Pour appeler la fonction, vous déclenchez un événement. Le gestionnaire à son tour déclenche un autre événement qui contient le résultat. Vous devez configurer un écouteur pour l'événement de résultat.
Voici le plugin - la plupart du temps l'architecture de plugin jQuery norme créée par un assistant en ligne:
(function($){
$.foo = function(el, options){
// To avoid scope issues, use 'base' instead of 'this'
var base = this;
// Access to jQuery and DOM versions of element
base.$el = $(el);
base.el = el;
// Add a reverse reference to the DOM object
base.$el.data("foo", base);
base.init = function(){
base.options = $.extend({},$.foo.defaultOptions, options);
// create private data and copy in the options hash
base.private_obj = {};
base.private_obj.value1 = (base.options.opt1);
base.private_obj.value2 = (base.options.opt2);
base.private_obj.value3 = (base.options.opt3);
// make a little element to dump the results into
var ui_element = $('<p>').attr("id","my_paragraph").html(base.private_obj.value1 +" "+ base.private_obj.value2+" " +base.private_obj.value3);
base.$el.append(ui_element);
// this is the handler for the 'get_multiplied_data_please' event.
base.$el.bind('get_multiplied_data_please', function(e,mult) {
bar = {};
bar.v1 = base.private_obj.value1 *mult;
bar.v2 = base.private_obj.value2 *mult;
bar.v3 = base.private_obj.value3 *mult;
base.$el.trigger("here_is_the_multiplied_data", bar);
});
};
base.init();
}
$.foo.defaultOptions = {
opt1: 150,
opt2: 30,
opt3: 100
};
$.fn.foo = function(options){
return this.each(function(){
(new $.foo(this, options));
});
};
})(jQuery);
Ainsi, vous pouvez attacher l'objet à un élément comme d'habitude lorsque le document est prêt. Et en même temps mettre en place un gestionnaire pour l'événement de résultat.
$(document).ready(function(){
$('body').foo();
$('body').live('here_is_the_multiplied_data', function(e, data){
console.log("val1:" +data.v1);
console.log("val2:" +data.v2);
console.log("val3:" +data.v3);
$("#my_paragraph").html(data.v1 +" "+ data.v2+" " +data.v3);
});
})
Tout ce qui reste est de déclencher l'événement et transmettre une valeur de multiplicateur Vous pouvez taper ceci dans la console - ou déclencher à partir d'un bouton qui choisit le multiplicateur d'un autre élément d'interface utilisateur
$('body').trigger('get_multiplied_data_please', 7);
Clause de non-responsabilité;) - Je suis assez nouveau à jQuery - désolé si c'est en utilisant un marteau pour casser un écrou.
Je ne peux pas définir resizeBind en tant que plugin séparé car certaines valeurs sont liées au plug-in splitter. – tchoesang