Call methods using jQuery Plugin design pattern

后端 未结 1 1867
时光取名叫无心
时光取名叫无心 2020-12-28 09:33

I\'ve been using the jQuery Boilerplate for developing plugins and one thing I can\'t figure out is how to call methods from outside the plugin.

For reference, here

相关标签:
1条回答
  • 2020-12-28 10:16

    You'll have to get a reference to the class to call it's method with that plugin structure.

    http://jsfiddle.net/D9JSQ/3/

    $(document).ready(function() {
        var test = $("#foo").test().data("plugin_test");
        test.goodbye();
    });
    

    To do what you want, you must get rid of document.write to test it.

    http://jsfiddle.net/D9JSQ/8/

    ;
    (function($, window, document, undefined) {
    
        var pluginName = 'test';
        var defaults;
    
        function Plugin(element, options) {
            this.element = element;
    
            this.options = $.extend({}, defaults, options);
    
            this._name = pluginName;
    
            this.init();
        }
    
        Plugin.prototype = {
            init: function(name) {
                this.hello();
            },
            hello: function(name) {
                console.log('hello');
            },
            goodbye: function(name) {
                console.log('goodbye');
            }
        }
    
    
        $.fn[pluginName] = function(options) {
            return this.each(function() {
                if (!$.data(this, 'plugin_' + pluginName)) {
                    $.data(this, 'plugin_' + pluginName, new Plugin(this, options));
                }
                else if ($.isFunction(Plugin.prototype[options])) {
                    $.data(this, 'plugin_' + pluginName)[options]();
                }
            });
        }
    
    
    })(jQuery, window, document);
    
    $(document).ready(function() {
        $("#foo").test();
        $("#foo").test('goodbye');
    });​
    

    Look to the console for information.

    0 讨论(0)
提交回复
热议问题