/ / Adicionando um retorno de chamada a um widget jquery - javascript, jquery, retorno de chamada, widget

Adicionando um retorno de chamada a um widget jquery - javascript, jquery, retorno de chamada, widget

Eu quero adicionar um retorno de chamada para um widget jquery.

Como exemplo, vejo que o retorno de chamada no widget arrastável está contido no seguinte:

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

Isso significa que eu também devo envolver meus callbacks emeste $ .ui.plugin.add ({}); pouco? tem outro jeito de fazer isto? Como, eu poderia ter uma função nas opções do widget que poderia lidar com isso, então chamar minha grade seria algo como:

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.

No meu caso estou usando uma grade. A grade carrega alguns dados json através de uma chamada ajax e, em seguida, agora que o dom é preenchido com a grade, eu quero fazer alguma manipulação com ele (adicione uma cor de plano de fundo no hover, por exemplo). Então, imagino poder chamar como parte da grade:

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

Alguma dica ou sugestão sobre como abordar a adição de um callback a um widget jquery?

Um exemplo que encontrei me confunde:

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); } });

Achei isso em um site explicando como adicionar um retorno de chamada a um widget de jquery, mas não vejo nada sobre o $.ui.plugin.add pouco nem vejo como change está sendo passado para setLevel. Como setLevel obter a função que está em change? Se é simplesmente que qualquer coisa passada para green5 é uma opção e, portanto, é acessível por meio de this.options, então onde é que o callback método que está chamando level dentro if ($.isFunction(callback)) callback(level); vem de onde? Estou tão confuso. :(

Respostas:

2 para resposta № 1

No exemplo (encontrado Aqui), o autor ressalta que podemos passar o callback assim como passamos qualquer outra opção. Pode ficar mais claro se reescrevermos como ele chama o widget assim:

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

O que isso faz é vincular a opção "change" a uma função anônima que usa uma variável e alerta o usuário de que a cor mudou para essa variável. Assim, a chamada

var callback = this.options.change;

recupera a função anônima passada como a opção "change" e a atribui à variável callback. A linha

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

simplesmente verifica se o retorno de chamada é de fato umfunção. Ele está verificando um valor nulo / um argumento passado incorretamente.Se o retorno de chamada passado em options.change é realmente uma função, nós o chamamos com o argumento "level".

ui.plugin.add () não precisa ser usado a menos que estejamos modificando um plugin de fora dele (veja exemplo Aqui).


1 para resposta № 2

Eu acho que isso poderia funcionar para você :)

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

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