Плагин jquery, где вводом могут быть параметры, имя метода или имя метода с параметрами - PullRequest
0 голосов
/ 08 февраля 2011

У меня есть плагин, объявленный так.

(function ($) {
    var settings = {
        setting 1: undefined
    };

    var methods = {
        init: function (options) {
            var data = $(this).data('myPlugin');

            if (!data) {
                //initialize plugin

                $(this).data('myPlugin', {
                    setting1: settings.setting1
                });
            }
        },
        doSomething: function() {
            //...do some work
        }
        sendData: function(data) {
            //TODO: Post data to the server
        }
    };

    $.fn.myPlugin = function (options) {

        if (methods[options]) {
            return methods[options].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof options === 'object' || !options) {
            methods.init.apply(this, arguments);
            return methods.home.apply(this, arguments);
        } else {
            $.error('Method ' + options + ' does not exist in jQuery.myPlugin');
        }
    };

})(jQuery);

Это прекрасно работает, когда я использую это так

$('#myId').myPlugin({ setting1 : 'someValue' });

и когда я хочу сделать что-то вроде

$('#myId').myPlugin('doSomething');

но как я могу изменить приведенный выше код для поддержки этого ...

var myData = 'some data';
var moreData = 'some more data';
$('#myId').myPlugin('sendData', { data: myData, moreData: moreData } );

... где я могу передать в качестве второго параметра все, что захочу, и передать этот параметр в функцию?

1 Ответ

1 голос
/ 08 февраля 2011

что-то вроде этого должно работать (хорошо, где это уместно)

if( typeof options == "object" ) {
  // settings
} else {
  // action (better to explicitly check for string and undefined though)
  if( arguments.length > 1 ) {
     var action_options = arguments[1];
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...