Selet dinâmico com AJAX
24/10/2011 22:31
0
Olá!

Estou usando um select dinâmico na minha aplicação grails para carregar informações com base no atributo selecionado em outro select, exatamente como esse do exemplo: http://www.grails.org/AJAX-Driven+SELECTs+in+GSP

O exemplo funciona perfeito no gsp "create". O problema é que, na minha gsp "edit" quando o atributo já está preenchido com um valor, o select aparece em branco. Como faço para que o evento só ocorra no caso do atributo ser nulo?

Obs.: A biblioteca usada nesse exemplo é a prototype. Caso alguém tenha o exemplo similar com jquery, também seria ótimo! :-)

Obrigado!
Tags: select dinâmico, prototype, jquery, ajax



0
Olá, Kico.

Sim, esta foi a url da qual eu peguei o exemplo citado. É o mesmo endereço que escrevi no primeiro post :-)

O que queria saber é como faço para que o evento só ocorra no caso do atributo ser nulo. Se o atributo já tem um valor, não tem porque o select aparecer em branco, aguardando a ação do outro select (evento "onChange").

Creio que deva ser algo bem simples de corrigir. Mas não encontrei um exemplo concreto na web.

Abraços!
25/10/2011 12:44


0
Hmm... saquei.

Neste caso, acho que convém você escrever algo com Javascript fora mesmo, como uma função.


0
Se tiver que fazer isso, tô lascado!...rs

:-(
25/10/2011 14:00


1
Você pode também trabalhar direto no seu controller. Agora, não é tão difícil assim.
Você poderia com jQuery fazer algo como o código abaixo supondo que o seu controller te retorne algo no formato JSON (da uma olhada na lista de links do Grails Brasil, postei um lá outro dia sobre como lidar com JSON):


function updateCombo() {
$.get(url, {parametro:valor}, function(data) {
$("#seucombo").find("option").remove()
// supondo que seja uma lista dentro de data
for (i = 0; i < data.lista.length; i++) {
$("#seucombo").append("<option value='" + data.lista[i].valor + "'>" + data.lista[i].nome + "</option>"
}
}, "json")
}


Viu, não é tãããão complicado assim :)


0
Olá, Kico!

Eu entendi... Mas como poderia chamar essa função?

No meu controller tenho a seguinte closure:

def ajaxGetCargos = {

def empresaInstance = Empresa.get(params.id)

def cargos = Cargo.withCriteria {
empresa {
eq("nome", empresaInstance.nome)
}
}
def resposta = []
resposta = cargos
render resposta as JSON
}

O código acima me retorna o resultado abaixo:

[
{"class":"br.com.teste.Cargo","id":1,"empresa": {"class":"Empresa","id":1},"nome":"Desenvolvedor"}
]

Nomeu gsp, ao selecionar a empresa, ele deve atualizar o combo de cargos... Então preciso trabalhar com o envento change:

$("#empresa").change( function() {
...
});

Ao chegar aqui vem a dificuldade... Não consigo recuperar o resultado da função. Tentei adaptar com o seu exemplo acima mas não consegui.

Obrigado!
06/12/2011 19:55


0
Opa!

Consegui com a função abaixo:

$('#empresa').change(function(){
$.getJSON("${createLink(controller:'usuario',action:'ajaxGetCargos')}",{id:$(this).val(), ajax: 'true'}, function(resposta){
$("#cargo").find("option").remove();

for(var i = 0 ; i < resposta.length ; i++)
{
$("#cargo").append("<option value='" + resposta[i].id + "'>" + resposta[i].nome + "</option>");
}
})
})

Obrigado!!!
06/12/2011 22:35



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto