none
Metodo callback com argumento(s) RRS feed

  • 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>");

          });

    }

    quinta-feira, 23 de setembro de 2010 18:59

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
    quinta-feira, 23 de setembro de 2010 23:46
  • 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.

    sexta-feira, 24 de setembro de 2010 00:36
  • Porque você não usa uma PartialView e reaproveita a mesma quando precisar?
    sexta-feira, 24 de setembro de 2010 17:02
    Moderador