jQuery插件框架

jQuery插件框架,jquery,jquery-plugins,Jquery,Jquery Plugins,查看jQuery的[Plugins/Authoring][1]文档,我发现了一些问题。我需要创建一个插件,让我可以执行以下操作: $('#one').plug({foo:'bar'}); $('#two').plug(); 根据文件,我应该: (function($){ var settings = { foo:'' }; var methods = { init:function(options){ retur

查看jQuery的[Plugins/Authoring][1]文档,我发现了一些问题。我需要创建一个插件,让我可以执行以下操作:

$('#one').plug({foo:'bar'});
$('#two').plug();
根据文件,我应该:

(function($){

    var settings = {
        foo:''
    };
    var methods = {
        init:function(options){
            return this.each(function(){
                $.extend(settings, options);

                //------ Problem ----------//
                alert(settings.foo);

            });
        }
    };
    $.fn.plug = function(method){
        //...
    }

})(jQuery);

问题:
$('one').plug({foo:'bar})按预期提示“bar”,但下一行不会返回空字符串,它也会返回“bar”。

我想我应该为有相同问题的人发布此消息。有很多方法可以创建jQuery插件。我现在经常使用的是此骨架:

(function($, window, document, undefined){

    function Skeleton(element, options){
        this.$element = $(element);
        this.options = options;

        // Plugin init goes here...

    }

    Skeleton.prototype = {
        // Plugin methods
        sampleMethod: function(){
            // ...
        }

    };
    // Plugin Definition //
    $.fn.skeleton = function(options){
        if( typeof options == 'string'){
            var plugin = this.data('skeleton');
            if(plugin){
                var r = plugin[options].apply(plugin, Array.prototype.slice.call( arguments, 1 ) );
                if(r) return r
            }
            return this
        }

        options = $.extend({}, $.fn.skeleton.defaults, options);

        return this.each(function(){
            var plugin = $.data(this, 'skeleton');
            if( ! plugin ){
                plugin = new Skeleton(this, options);
                $.data(this, 'skeleton', plugin);
            }
        });
    };
    $.fn.skeleton.defaults = {
        // Plugin options ...
    };

})(jQuery, window, document);

设置的obj不在插件的范围内。如果您转到JS控制台并输入设置,您应该会得到它。你真的不应该。你应该正确阅读文档。或者你需要在某个时候重置设置。如果我需要插件实例的本地值,通过用户默认设置在“init”方法中设置,并在插件实例的其他方法中可访问,我该怎么办?如果你想在你的插件范围之外有一个vvariable,实际上你做得很对。您再次获得“bar”的原因是它是从上次调用中保存的。由于设置不在插件中,因此不会重置(简单地说)。因此,您必须设置=“”;或者在你的插件开始时做一些类似的事情,或者在你的插件中创建你的var。我不是JS高手,所以你可能会在#freenode server(irc)上的jquery中问,有一个freenode.Great skeleton的网络聊天,但最后你需要做一个默认选项的组合:>plugin=new collapsablepanel(这个,$.extend({},options));