Ich habe schon einmal grundlegende jQuery-Plugins geschrieben, aber ich kämpfe darum, etwas komplizierter zu machen. Ich suche die API von jQuery UI, die wie das funktioniert zu emulieren:Wie kann ich die Jquery UI API emulieren?
$('#mydiv').sortable({name: 'value'}); // constructor, options
$('#mydiv').sortable("serialize"); // call a method, with existing options
$('#mydiv').sortable('option', 'axis', 'x'); // get an existing option
Ich habe versucht, die folgenden:
(function($){
$.fn.myPlugin = function(cmd){
var config = {
default: 'defaultVal'
};
if(typeof cmd === 'object'){
$.extend(config, cmd);
}
function _foo(){
console.log(config.default);
}
if(cmd==='foo'){
return _foo();
}
this.each(function(){
// do default stuff
});
}
})(jQuery);
$('#myElement').myPlugin({default: 'newVal'});
$('#myElement').myPlugin('foo');
Was Ich mag würde hier zu sehen ist ‚newval‘ zu sein geloggt, aber ich sehe 'DefaultVal' stattdessen; Das Plugin wird jedes Mal aufgerufen und neu gestartet, wenn ich .myPlugin() für das Element aufruft.
Ich habe auch versucht mit _foo.call (this) und einigen anderen Varianten. Keine Freude.
In gewisser Weise verstehe ich, warum dies passiert, aber ich weiß, dass es möglich sein muss, es auf die gleiche Weise wie jQuery UI zu tun. Ich kann einfach nicht sehen, wie!
(Ich schätze, dass jQuery UI die Widget Fabrik nutzt all dies zu handhaben, aber ich will nicht für das Plugin, dass eine Anforderung machen.)
+1 - Gute Frage! Ich lerne gerade jQuery selbst, also kann ich nicht wirklich helfen, aber ich wollte dir eine Beule geben :-) –
Danke schön :) –