Ajaxlink Con Funzionalità Live()

Ciao a tutti. E’ possibile create un ajaxLink che funzioni in modalità live?

Questa funzione per farmi capire meglio.

All’interno di una view utilizzo un renderPartial per visualizzare una lista di post

Al suo interno, per ogni elemento ho un ajaxLink che mi permette di effettuare il delete dell’elemento attraverso




echo CHtml::ajaxLink(

	'Delete',

	array('website/deletepostajax'),

    array(

    	'update'=>'#result_'.$post->id,

    	'type'=>'POST', 

    	'data'=>array(

    		'post_id'=>$post->id,

            ))

);

e questa è la funzione dentro il controller




public function actionDeletePostAjax()

 {

 	$post_id = $_POST['post_id'];

    	$post_to_delete = Post::model()->findByPk($post_id);

    	if($post_to_delete->delete()){

    	     echo "deleted";

    	}

}



Tutto ciò funziona.

All’interno della view però ho la funzionalità di creare dei post con ajax e di metterli in coda ai post precedenti. Quindi per i post generati con ajax, la funzione delete chiaramente non funziona :(

Qualche idea?

Non usare gli ajaxlink, usa dei link normali e mettici il callback ajax con live o .on o delegate come preferisci.

Ciao e grazie per la dritta. Per i posteri, questa è stata la mia soluzione.


	

<?php echo CHtml::link('Delete','', array('id'=>'deletepostajax_'.$post->id, 'class' => 'deletepostajax')); ?>




e all’interno della view




$(document).on("click", ".deletepostajax", '',function(){

	var id = $(this).attr("id");

	var exploded = id.split('_');

	var post_id = exploded[1];

	alert(post_id);

	$.ajax(

	{

		type: 'POST',

		url: '<?php echo Yii::app()->createAbsoluteUrl("website/deleteadvicepostajax"); ?>',

		data: { post_id: post_id },

		success:function(data)

		{

				 

			$('#single_post_'+post_id).fadeOut(300, function() { $(this).remove(); })

			},

		error: function(data) 

		{ 

			alert("Error occured.please try again");

		},

		dataType:'html'

		});

});



Potresti renderlo piu’ semplice e carino, per esempio mettendo l’id in get (il controllo che sia post lo puoi sempre fare come fa la delete di gii) o mettendo il post in data.

Cosi’ la funzione diventa:


 $(document).on("click", ".deletepostajax", '',function(){

        var link=$(this);

        $.ajax(

        {

                type: 'POST',

                url: link.attr("url"),

                success:function(data)

                {

                                 

                        $(qualche getter a partire dal link).fadeOut(300, function() { link.remove(); })

                        },

                error: function(data) 

                { 

                        alert("Error occured.please try again");

                },

                dataType:'html'

                });

});

Inoltre mi sembra strano che nella onSuccess ti funzioni $(this) per indicare il link, secondo me devi usare le proprieta’ delle closure (la variabile link).

Se semplifichi la funzione puoi anche mettere il js in un file a parte, con un enorme guadagno in figosita’ del codice.

In realtà, all’interno della pagina ho diversi post con questa tipologia di id


#single_post_'+post_id

quindi il remove mi serve per far scomparire il div del post :)

Abbi pietà, non ho capito nulla di quanto sopra :(