Как я могу сохранить вызов метода плагина в настройках другого вызова плагина, не выполняя его в jQuery? - PullRequest
0 голосов
/ 18 мая 2018

У меня есть два плагина jquery.Давайте назовем их плагином A и плагином B. Я хочу назначить метод из плагина B одной из настроек плагина A. Моя проблема в том, что метод из pluginA.settings.action выполняется, как только он определен в HTML.

<button>Click Me!</button>
<div id="message"></div>
$('button').pluginA({
  action: $('#message').pluginB("btnAction")
});

Как я могу сделать это без фактического вызова метода, если он определен в настройках плагина A?

(function($) {
    $.fn.pluginA = function(method) {
        var $element;
        var methods = {
            init : function(options) {
                settings = $.extend({}, this.pluginA.defaults, options);
                return this.each(function() {
                    $element = $(this);
                    element = this;
                  $element.on('click', function(){
                    settings.action;
                  })
                })
            }
        }
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error( 'Method "' +  method + '" does not exist in pluginA plugin!');
        }

    }

    $.fn.pluginA.defaults = {  
            ajaxUrl: "http://wordpress.com",
            eventId: 0,
            element: null
    }

    $.fn.pluginA.settings = {}

    $.fn.pluginB = function(method) {
        var $element;
        var methods = {
            init : function(options) {
                settings = $.extend({}, this.pluginB.defaults, options);
                return this.each(function() {
                    $element = $(this);
                    element = this;
                })
            },
            btnAction: function(){
                $element.text('The button was clicked!');
            }
        }
        if (methods[method]) {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method) {
            return methods.init.apply(this, arguments);
        } else {
            $.error( 'Method "' +  method + '" does not exist in pluginB plugin!');
        }

    }

    $.fn.pluginB.defaults = {  
            ajaxUrl: "http://wordpress.com",
            eventId: 0,
            element: null
    }

    $.fn.pluginB.settings = {}

})(jQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...