Clistview no ejecuta ajaxlink ni Fancybox despues del refresh
Hola a todos en YIIANSWERS!
Tengo el siguiente problema…
Estoy refrescando dinamicamente un CLISTVIEW usando “onkeyup” .
El codigo lo consegui en los foros de YII.
El campo que utilizo viene de un widget de JUIAUTOCOMPLETE e hice que la lista de autocomplete lea desde las glosas del modelo por ejemplo modelo “autos”
Adjunto el codigo que tengo en mi vista …
- //CJuiAutoComplete////
- widget('zii.widgets.jui.CJuiAutoComplete', array(
- 'name'=>'q',
- 'attribute'=>'glosa',
- 'model'=>'It',
- 'sourceUrl'=>array('it/aclist'),
- 'options'=>array(
- 'minLength'=>'1' ),
- 'htmlOptions'=>array(
- 'style'=>' size="499px"'
- ),
- ));
- //?>
//CJuiAutoComplete////
widget('zii.widgets.jui.CJuiAutoComplete', array(
'name'=>'q',
'attribute'=>'glosa',
'model'=>'It',
'sourceUrl'=>array('it/aclist'),
'options'=>array(
'minLength'=>'1' ),
'htmlOptions'=>array(
'style'=>' size="499px"'
),
));
//?>Despues, tengo mi el script que me permitira refrescar el clistview
- clientScript->registerScript('search',
- "var ajaxUpdateTimeout;
- var ajaxRequest;
- $('input#q').keyup(function(){
- ajaxRequest = $(this).serialize();
- clearTimeout(ajaxUpdateTimeout);
- ajaxUpdateTimeout = setTimeout(function () {
- $.fn.yiiListView.update(
- 'yw0',
- {data: ajaxRequest}
- )
- },
- // this is the delay
- 2);
- });"
- );
- ?>
clientScript->registerScript('search',
"var ajaxUpdateTimeout;
var ajaxRequest;
$('input#q').keyup(function(){
ajaxRequest = $(this).serialize();
clearTimeout(ajaxUpdateTimeout);
ajaxUpdateTimeout = setTimeout(function () {
$.fn.yiiListView.update(
'yw0',
{data: ajaxRequest}
)
},
// this is the delay
2);
});"
);
?>////////////////////////////////////////////////////////////
Finalmente tengo el clistview ….
- widget('zii.widgets.CListView', array(
- 'dataProvider'=>$dataProvider,
- 'itemView'=>'_view',
- 'id'=>'yw0',
- ));
widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
'id'=>'yw0',
)); Mi CListview llama a una vista parcial en donde lo que quiero hacer es que renderee la fotografia de cada
auto y que al hacer click sobre la foto me abra una ventana modal…
para esto estoy usando FANCYBOX… ademas quiero un link que al darle
click me muestre dinamicamente para cada auto el resultado del click
(“me gusta”,”ya no me gusta”.. para esto uso AJAXLINK. Este es el codigo de la vista parcial.
Primero tenemos el widget de fancybox…
- widget('application.extensions.fancybox.EFancyBox', array(
- 'target'=>'a[rel=gallery]',
- 'config'=>array(
- 'scrolling' => 'no',
- 'titleShow' => true,
- 'type' =>'image'
- ),
- // 'autoScale : false',
- // 'transitionIn : none',
- // 'transitionOut : none',
- //
- // 'width : 680',
- // 'height : 495',
- )
- );
- ?>
widget('application.extensions.fancybox.EFancyBox', array(
'target'=>'a[rel=gallery]',
'config'=>array(
'scrolling' => 'no',
'titleShow' => true,
'type' =>'image'
),
// 'autoScale : false',
// 'transitionIn : none',
// 'transitionOut : none',
//
// 'width : 680',
// 'height : 495',
)
);
?> luego el link…
en este link lo que hago es generar el link segun la documentacion de fancybox…
- createUrl('../images/it/medio/'.$data->file_name),
- $data->file_name),
- array('../images/it/'.$data->file_name)
- ,array('rel'=>'gallery'));
- ?>
createUrl('../images/it/medio/'.$data->file_name),
$data->file_name),
array('../images/it/'.$data->file_name)
,array('rel'=>'gallery'));
?>Hasta aca todo funciona de maravilla… cuando doy click sobre el icono del auto me muestra la ventana de fancybiox con la foto y la informacion que necesito y cuando filtro en el textfiel del autocomplete efectivamente lee desde la base de datos, me propone las glosas y al momento de presionar las teclas cambia automaticamente el contenido de listview segun las glosas de los autos.
El problema es.. ( despues de esta larga introduccion) que DESPUES DE FILTRAR el CLISTVIEW , si doy click sobre los links, en vez de mostrarme la ventana de fancybox, solamente me lleva a la url de la imagen, y la abre sola en el browser, no dentro del fancybox.
Cosa similar ocurre al darle click a los botones de “me gusta” y “ya no me gusta”.
Mi impresion es que hay algo mal con la funcion de updateo.. que no permite que despues del refresco se ejecuten ni los ajaxlinks ni el fancybox.
Eso por ahora YIIAnswers, muchas gracias de antemano !!!
By afuentes in List View · Asked 517 days 11 mins ago
Questions: 1 Accepted: 0 ( 0% ) | Reputation: 0
Possibly related Questions
-
Ajax Cform validation within renderPartial view
February 7, 2012 By TheDeveloper 4 Answers
TAGS
actioncreate ( x 2 )ACTIVERECORD ( x 4 )AJAX ( x 10 )ajaxSubmitButton ( x 4 )AR ( x 2 )cactivedataprovider ( x 2 )CActiveForm ( x 2 )cactiverecord ( x 2 )CGridView ( x 14 )CJuiAutoComplete ( x 3 )CJuiDialog ( x 8 )CListView ( x 8 )controller ( x 7 )Css ( x 2 )CStarRating ( x 2 )CTreeView ( x 2 )database ( x 5 )dialog ( x 2 )dropdownlist ( x 3 )EGMaps ( x 3 )extension ( x 3 )file ( x 2 )form ( x 6 )Giix ( x 2 )gridview ( x 2 )html ( x 2 )javascript ( x 3 )many_many ( x 4 )merge ( x 2 )model ( x 4 )Modules ( x 3 )multilanguage ( x 2 )php ( x 2 )redirect ( x 4 )Registration ( x 3 )relations ( x 5 )renderPartial ( x 8 )session ( x 2 )sorting ( x 3 )sql ( x 4 )url ( x 3 )urlManager ( x 3 )validation ( x 3 )yii ( x 11 )YiiAnswers Site ( x 4 )This website counts Questions and 429 Answers by 8460 registered users.

Hola y bienvenido,
El problema radica en que los scripts que ejecutan el refresh y el fancybox necesitan ser registrados en el view general y luego aquellos parciales que sean devueltos y requieran de un script, deben ser ‘procesados’ (chequea el tercer parametro de la función renderView)
Haz que que tus scripts utilicen el ‘live’, ‘delegate’, o el ‘on’ -incluido en la ultima version de JQuery. No tendras problemas.
By toni · 516 days 20 hours 10 mins ago
Questions: 0 Accepted: 0 ( 0% ) | Reputation: 0
Hola,
gracias por tu respuesta Toni… Resulta que he esatdo estos dias probando….
me lleve el widget de fancybox a la vista principal … ya que efectivamente lo tenia en la vista parcial… adem{as probe usando .live al momento de importar registrar el script de updateo del clistview pero el resultado sigue siendo el mismo…
Respecto a tu respuesta… cuando mencionas que haga que mis scripts utilicen “live” cuando no estoy usando el clientScript->registerScript().
lo pregunto pporque en todo mi problema lo unico que estoy registrando es el script para el clistview.. pero en el caso del fancybox solo estoy usando el widget de fancybox… espero me haya logrado expresar bien…
pd: Asumo que el problema es el mismo , pues ambas acciones (el fancybox y el update) se comportan igual despues del refressco del clistview.
gracias de antemano.
saludos!
By afuentes · 512 days 18 hours 12 mins ago
Questions: 1 Accepted: 0 ( 0% ) | Reputation: 0
Si usas el widget the fancybox, chequea sus scripts, te darás cuenta de que no usa el ‘live’ para iniciar el fancybox… Y es lo que necesitas, es por eso que cuando hay un AJAX refresh deja de funcionar… lo sé por pura experiencia personal
By toni · 510 days 4 hours 45 mins ago
Questions: 0 Accepted: 0 ( 0% ) | Reputation: 0
Perfecto Toni,
muchas gracias por aclararme la pelicula… ahora funciona a la perfeccion…
Me sirvio para entender ( y esto puede ser muy obvio para algunos) que las extensiones registran los scripts (por ejemplo registerscript)… entonces lo que hice fue modificar el .blind por .live!
siguiendo tu logica… imagino que para resolver completamente mi problema (pues queda aun solucionar el hecho de que el ajaxlink funcione despues del refresh que hace el clistview) es intervenir los scripts que rigen a ajaxlin.. pero dado que ajaxlink es nativo de YII deberia modificar el JQUERY no?
De ser así mi proxima pregunta es “¿donde en jquery enciuentro el script que rige a ajaxlink?”
muchas gracias nuevamente!
By afuentes · 505 days 4 hours 44 mins ago
Questions: 1 Accepted: 0 ( 0% ) | Reputation: 0
Finalmente lo solucione usando la extension lightbox 2 que esta disponible en la seccion de extensiones de yii framework :)
By afuentes · 405 days 18 hours 13 mins ago
Hola afuentes!
He encontrado tu post y es exactamente lo que estaba buscando. Tengo una clistview para mostrar una serie de fotos. Al mismo tiempo, uso el fancybox widget para poder mostrar un lighbox de las fotos.
No consigo encontrar en el component de fancybox, entre el registerScriptFile ningun “live” o “blind” como comentas…
Puedes poner el código para ver dónde tengo que modificar-lo para que funcione?
Muchas gracias!
By dianaket · 371 days 5 hours 49 mins ago
Questions: 0 Accepted: 0 ( 0% ) | Reputation: 0
Hola!
Encontré los .bind en los .js y los cambié por .live.
Ahora me funciona el lightbox. Lo único es que si tengo una galeria de 3 imágenes, y el lightbox tiene las flechas de navegación (previa – anterior) no me funcionan (no carga la imagen correspondiente). Este comportamiento funciona en tu proyecto?
Gracias!
By dianaket · 371 days 4 hours 55 mins ago
Questions: 0 Accepted: 0 ( 0% ) | Reputation: 0
Hola Dianaket ,
Lo que pasó es que finalmente yo no utilice la extensión “fancybox”, sino que me olvide de ella y utilicé “lightbox 2″
Cuéntame como te va a ver si te puedo ayudar.
Saludos!
By afuentes · 371 days 1 hour 12 mins ago
Questions: 1 Accepted: 0 ( 0% ) | Reputation: 0
Hola afuentes!
He utilizado la extension que comentas de lightbox2 y funciona todo correctamente!
Sólo una pregunta, es correcto tener el widget de lightbox en la vista que es itemView de la clistview? Es una forma correcta de programación en yii?
Muchas gracias!
By dianaket · 370 days 12 hours 56 mins ago
Questions: 0 Accepted: 0 ( 0% ) | Reputation: 0