Inquiridor
Metodo callback com argumento(s)

Pergunta
-
Olá,
estou desenvolvendo uma aplicação web em mvc utilizando jQuery.
E na tela de cadastro de pessoa, tem DropDownList de cidades que é carregado conforme o estado selecionado. Para não necessitar escrever o mesmo método as três vezes, preciso passar mais um parâmetro para a function callback que está em javascript. Por padrão (juro que ainda não entendi), mas ele já recebe o retorno do $.getJSON, porém quero passar mais 1 parâmetro (que seria do DropDownList de cidades a ser preenchido).
Logo abaixo segue o código que estou utilizando até o momento.
$(document).ready(registraEventos);
function registraEventos() {
$("#Ufs").change(function () { listaCidade($(this).val()) });
}
function listaCidade(uf) {
$.getJSON('<%= Url.Action("CarregaCidades") %>/' + uf, listaCidadeCallBack);
}
function listaCidadeCallBack(json) {
$("#Naturalidade_Id :gt(0)").remove();
$(json).each(function () {
$("#Naturalidade_Id").append(<option value='" + this.Id + "'>" + this.Nome + "</option>");
});
}
Todas as Respostas
-
Olá Mateus, se entendi bem, voce quer receber algo mais em sua função listaCidadeCallBack, neste caso voce poderia passar uma function anonima e enviar para seu callback o parametro extra, parecido com o seguinte:
function listaCidade(uf) {
$.getJSON('<%= Url.Action("CarregaCidades") %>/' + uf, function(json)
{
//prepara seus dados extras
var parametro_extra = "seu_parametro"
listaCidadeCallBack(json, parametro_extra)
});
}
function listaCidadeCallBack(json, meu_parametro_extra) {
//aqui faz o que tem de fazer
}
Já o que voce citou em seu post sobre o callback receber por padrão o parametro json, funciona assim, o jquery usa o mesmo conceito de delegates do .NET, recebendo e/ou passando a referencia de seus callbacks, o jquery o armazena internamente, para que quando completar a requisição, enviar o retorno json.
Algo pratico assim
var SeuFramework = {
load:function(delegate){
this.complete = delegate;
//faz o trabalho e quando completar
this.complete("retorno do framework");
},
complete:null
};
//Usuário do framework
SeuFramework.load(callback);
function callback(retorno)
{
alert(retorno)
}
Espero que tenha te ajudado
---------------------------------------- Se a resposta te ajudou marque como útil -
Não seria isso.
Eu quero passar um argumento a mais para a callback, e não receber mais argumentos.
Exemplo:
// nesse trecho do código, aumento 1 argumento
function listaCidade(uf) {
$.getJSON('<%= Url.Action("CarregaCidades") %>/' + uf, listaCidadeCallBack(ddlCidades);
}
// mas como não é um método comum, isso não funciona, acredito que deve ser um pouco diferente a sintaxe.
-