Diálogo em JS dinâmico

Galera, alguem está usando algum plugin/função/extensão/whatever pra diálogo nos seus projetos?

To tendo que fazer uma parada aqui, e necessito renderizar um diálogo por ajax respondendo ao click de um link. Tentei usar a extensão JUI, mas a extensão da forma que está, não é possível usar o diálogo muito bem (Só da pra usar o diálogo quando se recarrega a página).

alguem já usou diálogos desta forma?

Eu uso somente o Flash Messages do Yii.

Da forma como vc está querendo fazer, eu tenho uma sugestão:




<?php echo CHtml::ajaxButton('TextoDoMeuBotao',array("acaoQueVaiGerarOTexto"), array(

            'type'=>'GET',

            'data'=>array('seuParametro'=>'js:$("#algumInputDaVida").val()'), // passando valores pra chamada

            'success'=>'meuDialogo', // indique uma funcao javascript

    )); ?>


//sua funcao javascript

function meuDialogo(retorno){

    if (retorno== null){

        return;

    }

    alert(retorno);

}



Tem o ajaxLink também!

Voce pode combinar a chamada ajax com um Plugin do jQuery para dialogo: Impromptu ou jDialog

Não dá … quando vc usa o renderPartial, o CClientScript não renderiza. Então o renderPartial só traz o html do widget. Eu até arrumei uma solução pra isso. Seria renderizar o CClientScript manualmente na minha action, mas neste momento ele traz tudo, incluindo as tags de todos os .js, pra inclusão na página. Nomrmalmnte o navegador requisita novamente os arquivos no servidor, e ai gera mais trafego do que eu queria gerar, pq a cada requisição ajax renderizada com renderPartial, ele me traz de novo o .js do core do JQuery por exemplo.

O CClientScript tem a opção d renderizar apenas os scripts da página. Mas ai, se faltou algum .js no cliente, vc fica sem… Acabou me deixando em um grande dilema.

Para renderizar os scripts com renderPartial:




$this->renderPartial('url', array('params' => $params), false, true);



Essa vai de graça, hein? rsrsrs :lol:

Daniel,

Na view "main" e no início da tag <BODY> eu adicionei a segunte linha:




<?php $this->widget('application.extensions.jui.EJqueryUiInclude', array('theme'=>'redmond'));?>



Como você pode ver, estou usando a extensão "JUI" com tema "redmond".

Edite uma view qualquer, copie e cole o código abaixo no início da página editada, somente pare teste.




<script type="text/javascript">

    $(document).ready(function() {

        // Parametros de visualizacao do painel dialog

        $("#divDialog").dialog({

            bgiframe:true,

            autoOpen:false,

            width:260,

            height:160,

            modal:true

        });

        

        // Ver dialogo

        $('#DialogButton').click(function(){

            $("#divDialog").dialog('open');

        });

        

    });

</script>


<div id='divDialog' title="Título">

    <b>Nome:</b><br/><?php echo 'Armando Ricardo' ?><br/><br/>

    <b>Cidade:</b><br/><?php echo 'Rio de Janeiro'; ?>

</div>

    

<a href='#' id='DialogButton'>Ver diálogo</a>



Feito isso, clique no link "Ver diálogo" e vê se é isso que você precisa.

Se der certo, e se for isso, organize os códigos da sua maneira, pois tive que juntar tudo num só lugar, para mostrar aqui no forum.

Ta quase. O resultado que eu tive foi o mesmo renderizando o CClientScript manualmente, só que passando por parâmetro no renderPartial é bem mais prático, alem de economizar 2 linhas pra renderização do CClientScript.

Mas ainda tem o problema que os .js são reenviados pro cliente. Quando uso o renderPartial ele gera todas as tags "<scripts>" na renderização carregando os .js no cliente, e o navegador nada inteligente faz todas as requisições novamente. (E estes arquivos repetidos só fazem consumir banda e memória do navegador)

Por enquanto vai ficar assim mesmo. No framework não achei nada qu pudesse me ajudar a fazer carregamento dinâmico dos .js incluidos. Mas vou acabar fazendo depois uma lib aqui pra carregar os .js em requisições ajax.

Eu entendi a sua idéia, mas é um pouquinho diferente do que eu preciso. No cliente não tem diálogo. O Cliente apenas faz uma requisição para o servidor, que pode ser um dialogo(Pode redirecionar a página, pode pedir login, pode várias coisas). As informações do diálogo poem ser diferentes para cada registro que ele esteja selecionado(selecionado num JQGrid), e isso depende e inúmeros fatores. Eu até poderia carregar o conteudo do dialogo com $.ajax( … ) do JQuery, mas eu gostaria de escrever o mínimo de JS possível (Não pq não goste, mas JS é mais trabalhoso pra manutenção).

Eu estou com o mesmo problema.

Preciso realziar uma chamada via Ajax com jQuery sendo que com o renderPartial os script .js vem junto na resposta do servidor, pois no controller estou usando o comando:

Yii::app()->clientScript->registerCoreScript(‘jquery’);

E o jquery.js vem em todas as requisições ajax com o renderPartial, e então eu pergunto, o que fazer para que isso não ocorra?

Eu quero como resultado da chamada ajax somente o que está na view.

Olá,

Eu resolvi o meu problema da seguinte maneira:

$this->renderPartial(’_listarFotos’, array(‘model’ => $model), false, false);

ao invés de:

$this->renderPartial(’_listarFotos’, array(‘model’ => $model), false, true);

if (Yii::app()->request->isAjaxRequest)

// renderiza sem registrar o core

else

// renderiza o core