Reload em um div

33 views
Skip to first unread message

Adriano Marinho

unread,
Oct 9, 2017, 6:22:19 PM10/9/17
to web2py-users-brazil
Boa Tarde Pessoal

Estou com dificuldade em recarregar uma div quando chamo uma função através do selectable do SQLFORM.grid

vou tentar explicar, tenho duas tabelas:  Família de Produtos e Produtos, 

carrego o controller:  familia_produtos por LOAD

formProdutos = LOAD(c='cadastro', f='familia_produtos', content='Aguarde, carregando...',
                              target='familiaProdutos', ajax=True, args=idFamilia)

Nesse Controller tenho um botão que chama um Modal para selecionar e adicionar produtos para determinada família

def familia_produtos():

    session.idFamilia = int(request.args(0))

    btnAdicionar =  A(SPAN(_class="glyphicon glyphicon-plus"),' Adicionar Produtos',_class="btn btn-default",_id='adcionar',
    _onclick="show_modal('%s','%s');" %(URL(('cadastro','selecionar_produtos',vars={'reload_div':'map'}),' Adicionar Produtos'))
  
    query = (Produtos.familia == session.idFamilia)
    fields= [Produtos.codigo,Produtos.nome,Produtos.preco]
    links = [lambda row: A('remover',_onclick="return confirm('Deseja Remover Produto ?');",callback=URL('cadastro', 'remove_produto', args=[row.id]))]
    formFamiliaProdutos = grid(query,orderby=Produtos.nome,args=[session.idFamilia],fields=fields,
                             create=False,editable=False,deletable = False,searchable=False,
                             links=links)
    
    return dict(btnAdicionar=btnAdicionar,formFamiliaProdutos=formFamiliaProdutos)


No Modal mostro um SQLFORM.grid para selecionar produtos e chamo a função  adiciona_produto através do botão do selectable

def selecionar_produtos():

    fields = [Produtos.id,Produtos.nome]

    selectable = [('Adcionar Produtos', adiciona_produto)]

    formPesquisa = grid(Produtos,50,fields=fields,orderby=Produtos.nome,create=False,editable=False,
                deletable=False,selectable=selectable)

    return dict(formPesquisa=formPesquisa)

Após executar a função (adiciona_produto), não estou conseguindo fechar o Modal e fazer o reload na div #familiaProdutos com os produtos selecionados

def adiciona_produto(ids):
    for idProduto in ids:
        Produtos[idProduto] = dict(familia=session.idFamilia)
     
    response.js = "hide_modal(%s);" %("'familiaProdutos'") ******* AQUI NÃO ESTÁ FUNCIONANDO *******

na view:
<script>
    function hide_modal(target){
        $('#janela-modal').modal('hide');
        $("#" + target).get(0).reload();
    };
</script>

No entanto a função remove_produto que é chamada por link está funcionando

def remove_produto():
    idProduto = int(request.args(0))
    Produtos[idProduto] = dict(familia=None)
    response.js = "hide_modal(%s);" %("'familiaProdutos'") ******* AQUI FUNCIONA *******


Obs: grid() é um SQLFORM.grid default (seguindo dica do Carlos em posts anteriores)

Tentei
response.js =  "jQuery('#familiaProdutos').get(0).reload()"
mas também não funcionou

com o redirect funciona, mas recarrega toda a página, gostaria de atualizar somente a div
redirect(request.env.http_web2py_component_location,client_side=True)

Ficou muito confuso, mas se alguém conseguiu entender

Obrigado
Adriano








Carlos Costa

unread,
Oct 10, 2017, 7:13:46 AM10/10/17
to web2py-us...@googlegroups.com
Eu não tenho tido sucesso com esse método reload, não sei por que.
Se for possível pegar montar a url corretamente novamente, tente fazer assim para recarregar o componente.

web2py_component(url, target='familiaProdutos')

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.



--


Carlos J. Costa
Cientista da Computação  | BS Computer Science
Esp. Gestão em Telecom   |
PgC Telecom Mangement
<º))><

Adriano Marinho

unread,
Oct 11, 2017, 6:53:39 AM10/11/17
to web2py-users-brazil
Carlos....Obrigado pela resposta

Testei o web2py_componente mas também não funcionou, deve ser algum característica do selectable

tanto com o reload ou com  web2py_componente, não dá erro mas recarrega a página atual (modal)

Teste ao invés de chamar diretamente a função alterei para redirect

selectable = [('Adcionar Produtos', lambda ids: redirect(URL('adiciona_produto',vars=dict(ids=ids)))),]

Desta maneira em ambos os métodos recarregou corretamente o grid com os produtos adicionados mas a página ficou congelada (share na tela)

Adriano

Carlos Costa

unread,
Oct 11, 2017, 7:43:10 AM10/11/17
to web2py-us...@googlegroups.com
Deu a entender que é problema com ids (ids de divs repetidos) ou a página sendo carregada contém o inlude layout.html
Se a página carrega via load com ajax tiver o layout.html ocorrem vários problemas de css e js. Menus param de funcionar e layout desconfigura.

--
Você recebeu essa mensagem por estar inscrito no grupo web2py-users-brazil.
Para enviar uma mensagem ao grupo, envie email a: web2py-users-brazil@googlegroups.com
Para se desinscrever, envie email a: web2py-users-brazil+unsub...@googlegroups.com
Para mais opções, visite o site do grupo em: http://groups.google.com/group/web2py-users-brazil?hl=en
---
Você recebeu essa mensagem porque está inscrito no grupo "web2py-users-brazil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para web2py-users-brazil+unsub...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages