Добавление обратного вызова в виджет jquery - PullRequest
4 голосов
/ 31 декабря 2010

Я хочу добавить обратный вызов в виджет jquery.

В качестве примера я вижу, что обратный вызов в перетаскиваемом виджете заключен в следующее:

$.ui.plugin.add("draggable", "connectToSortable", {
// callbacks in here
})

Означает ли это, что я должен также обернуть свои обратные вызовы в этот $ .ui.plugin.add ({}); немного? Есть ли другой способ сделать это? Например, мог бы я иметь функцию в опциях виджета, которая могла бы справиться с этим, поэтому вызов моей сетки будет выглядеть примерно так:

var foo = {
    LoadIt: function(url, formid){
        var bar = '',
        $('#baz').grid({
            title: {somevar : true},
            rowcontent: {data: setup and populate rows},
            onComplete: function(){
                //mycallback could go here
            }
        });
    }
}, // another grid loader, etc.

В моем случае я использую сетку. Сетка загружает некоторые данные json через вызов ajax, а затем, теперь, когда dom заполняется сеткой, я хочу сделать с ней некоторые манипуляции (например, добавить цвет фона при наведении). Поэтому я представляю себе возможность звонить как часть сетки:

onComplete : function(){//add my background color on hover here};

Какие-либо советы или предложения о том, как подойти к добавлению обратного вызова в виджет jquery?

Пример, который я нашел, который смущает меня:

var Green5 = {
    setLevel: function(x){
        //...
        this.element.css({background: greenlevels[level]});
        var callback = this.options.change;
        if ($.isFunction(callback)) callback(level);
    },
    // ... rest of widget definition
};
$.widget("ui.green5", Green5);

$('.target').green5({change: function(x) { alert ("The color changed to "+x); } });

Нашел это на сайте, объясняющем, как добавить обратный вызов в виджет jquery, но я не вижу ничего о бите $.ui.plugin.add и не вижу, как change передается в setLevel. Как setLevel получает функцию из change? Если просто что-то переданное в green5 является опцией и, следовательно, доступно через this.options, то откуда взялся метод callback, вызывающий level в if ($.isFunction(callback)) callback(level);? Я весьма озадачен. (

Ответы [ 2 ]

2 голосов
/ 19 июля 2011

В примере (найдено здесь ) автор указывает, что мы можем передать обратный вызов так же, как мы передаем любую другую опцию. Может быть, будет понятнее, если мы напишем, как он называет виджет следующим образом:

var options = {
    change: function(x){ alert("The color changed to "+x);}
}
$('.target').green5(options);

То, что это делает, это связывает параметр «изменение» с анонимной функцией, которая принимает переменную и предупреждает пользователя, что цвет изменился на эту переменную. Таким образом, звонок

var callback = this.options.change;

извлекает анонимную функцию, переданную в качестве опции 'change', и присваивает ее переменной callback. Линия

if ($.isFunction(callback)) callback(level);

просто проверяет, является ли обратный вызов действительно функцией. Он проверяет нулевое значение / неправильно переданный аргумент. Если обратный вызов, переданный в options.change, на самом деле является функцией, мы вызываем его с аргументом «level».

ui.plugin.add () не нужно использовать, если только мы не модифицируем плагин извне (см. Пример здесь ).

1 голос
/ 25 января 2011

Я думаю, что это может сработать для вас:)

help_foo = function (){
 alert('help !!!');
}
var callback = 'help_foo';

(callback)(function (){
   callback failed
});
...