Плагины Jquery, вызывающие функции из других методов - PullRequest
5 голосов
/ 05 мая 2011

Как и многие другие подобные вопросы, я пишу свой первый плагин jQuery.Он предназначен для выбора элемента select и замены параметров интерактивными элементами списка, которые будут использоваться в качестве образцов.У меня отлично работает основная функциональность, но мне нужно добавить возможность вызывать другой метод, который отключит определенные опции.Моя проблема заключается в том, что при этом мне нужно связать некоторые элементы click и развязать другие.

В настоящее время мое первоначальное связывание содержится в функции внутри моего метода init.Мне нужно иметь возможность вызывать эту функцию из другого метода «отключить».Итак, вот некоторый код:

(function($){

var methods = {

    // Init method
        init    : function(options) {
            // Set options
            var
                defaults = {
                        clickCallback:  function(){} // Define empty function for click callback
                  }
            ,   settings = $.extend({}, defaults, options)


            // Function to bind options
            function fnBindOptions(var1, var2, var3) {
                // Stuff to bind elements

                    // Hit the click callback
                    settings.clickCallback.call(this); 

            }   

            return this.each(function() {

                // Check that we're dealing with a select element
                if(element.is('select')) {

                    // Loop through the select options and create list items for them
                    $('option', element).each(function() {

                        // Stuff to create list elements

                        // Bind click handler to the new list elements
                        fnBindOptions(var1, va2, var3);
                    });

                }

            });

            // return 
            return this();              
        }


    // Disable buttons method
    ,   disable : function(options) {

            // I need to access fnBindOptions from here
            $(elementID).children('li').removeClass('disabled').each(function(){
                fnBindOptions(var1, var2, var3);
            });

        }
};

Вот моя проблема: мне нужно вызывать функцию привязки для каждой опции перед ее отключением - но я не могу получить доступ к fnBindOptions из метода disable - и потому что fnBindOptions включает в себяобратный вызов из переменной 'settings', я также не могу переместить его за пределы метода 'init'.

Итак, есть ли у кого-нибудь какие-либо советы здесь?

Спасибо!

1 Ответ

6 голосов
/ 05 мая 2011

Один из способов решить эту проблему - поместить ваши функции defaults, settings и bindOptions в объект methods (или другой объект в более широкой области видимости) и ссылаться на них соответственно:

var methods = {
    defaults: {
        clickCallback: function() {}
    },
    settings: {},

    bindOptions: function(var1, var2, var3) {
        // Stuff to bind elements
        // Hit the click callback
        methods.settings.clickCallback.call(this);
    },

    // Init method
    init: function(options) {
        methods.settings = $.extend({}, methods.defaults, options);

        return this.each(function() {
            if (element.is('select')) {
                $('option', element).each(function() {
                    // Stuff to create list elements
                    // Bind click handler to the new list elements
                    methods.bindOptions(var1, va2, var3);
                });
            }
        });
    },

    // Disable buttons method
    disable: function(options) {
        $(elementID).children('li')
                    .removeClass('disabled')
                    .each(function() {
            methods.bindOptions(var1, var2, var3);
        });
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...