Загрузка данных с использованием разных функций - PullRequest
0 голосов
/ 11 марта 2011

У меня есть плагин, который может загружать данные разными способами.В настоящее время я использую флаг и if для запуска правильной функции.Я пытаюсь выяснить, как вместо этого использовать указатель на функцию.

Вот фрагмент:

$.fn.shureTable = function(options) {  
    var defaults = {  
        loadMethod: populateFromArray
    };  


    return this.each(function() {
        var $this = $(this);

        function loadJson(json) {
            if (json.appendMode == 0)
                        jQuery('tbody', $this).empty();

            options.loadMethod(json.Rows);
        }
        function populateFromArray(rowArray){
        }
    }
}

Я получаю сообщение об ошибке, в котором говорится, что populateFromArray не определен.Как я могу контролировать, какую функцию использовать, используя options?

1 Ответ

0 голосов
/ 11 марта 2011

Вы столкнулись с проблемами из-за области.Функция недоступна, потому что она находится внутри каждого оператора.

Но вы можете сделать что-то вроде this и составить список параметров, а затем передать, какой параметр вы хотите использовать,Аналогично, вы можете сделать так, чтобы вы могли передавать пользовательскую функцию через.

<p id="red">Red colored</p>
<p id="green">Green colored</p>
<p id="blue">Blue colored</p>

<div>This is a custom function</div>

(function($){    
    $.fn.extend({
        color: function(method){
            // list of possible methods
            var methods = {
                red: function(a){ return '<span style="color:red;">'+a+'</span>' },
                green: function(a){ return '<span style="color:green;">'+a+'</span>' },
                blue: function(a){ return '<span style="color:blue;">'+a+'</span>' },
            }
            // assign the appropriate function based on the "method" argument
            var func = methods[method] || function(a){ return a; };

            // run through the elements and apply that function
            return this.each(function(i,e){
                $(e).html(func($(e).html()));
            });
        },
        color2: function(func){
            func = func || function(a){ return a; };
            return this.each(function(i,e){
                $(e).html(func($(e).html()));
            });
        }
    });
})(jQuery);

$('p').each(function(i,e){
    $(e).color($(e).attr('id'));
});

$('div').color2(function(a){
    return '<b style="color:#FF00FF">'+a+'</b>';
});

color можно передать имя, найденное в объекте method .color2 можно передать целую функцию, чтобы вы могли расширить то, что вы хотели бы с ней сделать.(Вы можете просто проверить параметры и изменить поведение в зависимости от типа аргумента, но это было сделано для демонстрации).

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