Diálogo em JS dinâmico
#1
Posted 07 January 2010 - 02:10 PM
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?
twitter.com/nenhumnick
#2
Posted 08 January 2010 - 08:10 AM
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);
}
#3
Posted 15 January 2010 - 07:01 AM
Voce pode combinar a chamada ajax com um Plugin do jQuery para dialogo: Impromptu ou jDialog
#4
Posted 15 January 2010 - 10:36 AM
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.
twitter.com/nenhumnick
#5
Posted 18 January 2010 - 06:45 AM
$this->renderPartial('url', array('params' => $params), false, true);
Essa vai de graça, hein? rsrsrs
#6
Posted 18 January 2010 - 11:48 AM
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.
#7
Posted 18 January 2010 - 02:29 PM
ricardograna, on 18 January 2010 - 06:45 AM, said:
$this->renderPartial('url', array('params' => $params), false, true);
Essa vai de graça, hein? rsrsrs
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.
twitter.com/nenhumnick
#8
Posted 18 January 2010 - 02:38 PM
Armando, on 18 January 2010 - 11:48 AM, said:
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.
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).
twitter.com/nenhumnick
#9
Posted 31 January 2010 - 03:08 PM
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.
#10
Posted 31 January 2010 - 11:29 PM
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);
#11
Posted 01 February 2010 - 09:24 AM
// renderiza sem registrar o core
else
// renderiza o core
twitter.com/nenhumnick

Help















