Tinymce + Cgridview Con Checkbox + Form.. Jquery Non Va

Ciao a tutti,

ho un problema in una pagina articolata in questo modo:

ho una GridView con dei checkbox per validarne le righe.




<?php

    $this->widget('zii.widgets.grid.CGridView', array(

    'id'=>'altro-grid',

    'htmlOptions'=>array('style'=>'padding: 0 0;'),

    'dataProvider'=>new CArrayDataProvider(Altro::model()->findAllByAttributes(array('progetto_id'=>$model->id,'presentato'=>true),array('order'=>'id ASC')), array()),

    'summaryText'=>false,

    'rowCssClassExpression'=>'($data->abilitato=="1")?("odd")<img src='http://www.yiiframework.com/forum/public/style_emoticons/default/sad.gif' class='bbc_emoticon' alt=':(' />"even")',    		

    'columns'=>array(

        array(

            'id'=>'autoId3',

            'class'=>'CCheckBoxColumn',

            'selectableRows' => '50',

        	'checked'=>'$data->abilitato',

        	'value'=>'$data->id',

        	'checkBoxHtmlOptions'=>array(

        		'onclick'=>'check_checkbox_altro(this);',

        	)

        ),

    	array('name'=>'Descrizione','value'=>'$data->descrizione'),

    ),

)); ?>



ogni checkbox viene passato alla funzione check_checkbox…




if(!$(input).attr('checked')){ 

		<?php echo CHtml::ajax(array(

	            'url'=>array('admin/ajaxupdaterisorse?act=doInactiveAltro'),

	            'data'=>array('autoId3[]'=>'js:$(input).val()'),

	            'type'=>'post',

	            'success'=>"reloadAltro",

	    ));?>

	} else {

		<?php echo CHtml::ajax(array(

	            'url'=>array('admin/ajaxupdaterisorse?act=doActiveAltro'),

	            'data'=>array('autoId3[]'=>'js:$(input).val()'),

	            'type'=>'post',

	            'success'=>"reloadAltro",

	    ));?>

	}



e poi il il widget tinymce.

tutta la pagina funziona in ajax e reloadAltro mi aggiorna la gridview, una volta conclusa la Action con successo:




 $.fn.yiiGridView.update('altro-grid');



Tutto questo funzionava e funziona se al posto del widget ci metto ad esempio una TextArea.

Ora invece se valido un checkbox non ho nessun feedback ma se faccio il refresh della pagina, o guardi il db vedo che cmq le action vanno a buon fine.

Quindi mi si presenta, credo, qualche problema con jquery e infatti la gridview non mi si aggiorna.

Questo è il warning del chromium inspector




Cannot read property 'loadingClass' of undefined jquery.yiigridview.js



Voi che mi dite?

Il widget ti fa ricaricare jquery, se controlli con la console quello che succede vedrai che parte non solo la tua ajax request, ma anche una richiesta per jquery.

Per evitare questo metti questo nel controller:


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

            Yii::app()->clientScript->scriptMap['jquery.js'] = false;

            Yii::app()->clientScript->scriptMap['jquery.min.js'] = false;

            Yii::app()->clientScript->scriptMap['jquery-ui.js'] = false;

            Yii::app()->clientScript->scriptMap['jquery-ui.min.js'] = false;

        }    

Questa cosa di non ricare mai jquery e jquery.ui e’ di solito una cosa buona e giusta, la potresti mettere nella beforeAction di una masterClass per i tuoi controllers, cosi’ non ci pensi piu’.

grazie zaccaria… domani provo e vi faccio sapere.

io avevo provato a disabilitare solo jquery ma non andava… ci sta che dovessi disabilitare tutto.

Il discorso che mi accennavi della beforeAction, potresti spiegarmelo meglio? grazie mille!

Dovresti avere una masterclass per i controller, che si chiama controller.

Li ci metti;


public function beforeAction($action)

{

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

            Yii::app()->clientScript->scriptMap['jquery.js'] = false;

            Yii::app()->clientScript->scriptMap['jquery.min.js'] = false;

            Yii::app()->clientScript->scriptMap['jquery-ui.js'] = false;

            Yii::app()->clientScript->scriptMap['jquery-ui.min.js'] = false;

        }      

        return parent::beforeAction($action);

}

purtroppo la soluzione consigliatami non va…

La situazione è questa:

Action che tira fuori la view che ha gridview+widget tinymce.

tutti e due dovrebbero caricare jquery… lo fanno e i due widget si caricano correttamente.

Quindi fino a qui non mi si presenta il problema di avere più istanze jquery in esecuzione.

Il problema ce l’ho, quando vado a validare il checkbox, la funzione invia un post ad un’altra action.

questa restituisce ok oppure genera un’eccezione. quindi con la chiamata ajax io non ricarico nessuna pagina, io mi faccio dare l’ok o meno.

Quando ritorna l’ok la funzione fa il refresh delle grid. a questo punto se c’è il tinymce nella pagina questa parte non mi funziona. tutto il resto va. sono io che ho capito male quello che mi suggerivi?

Magari e’ un problema di tinyMCE che non ama i refresh, forse devi rieseguire lo script di refrsh.

Purtroppo non ho esperienza con tinyMCE, io uso CKeditor, e dopo un refresh bisogna fare destroy e refresh.

ho seguito la tua strada e mi sono orientato su ckeditor,

effettivamente non mi da il problema di tinymce maledetto!!

magari è l’estensione che non fa bene il suo lavoro.

io ho usato questa di ckeditor:

http://www.yiiframework.com/extension/eckeditor

ora in un’altra pagina ho un problema con ckeditor.

uso una JuiDialog per aprire una view in cui ci sono diverse textarea, volevo

rimpiazzarle con dei widget ckeditor… non me lo fa…

ho i seguenti errori su inspector di chromium




GET http://localhost/m_yii/admin/viewpresentato/config.js?t=B8DJ5M3 400 (Bad Request) config.js:1

GET http://localhost/m_yii/admin/viewpresentato/lang/it.js?t=B8DJ5M3 400 (Bad Request) it.js:1

Uncaught TypeError: Cannot read property 'options' of undefined

GET http://localhost/m_yii/admin/viewpresentato/skins/kama/editor.css?t=B8DJ5M3 400 (Bad Request) editor.css:1



viewpresentato è l’action/view che contiene varia roba incluso il bottone che mi apre la jui dialog… mah?!

grazie per il supporto.

tinyMce e’ un medda, in generale tutti i wysiwyg sono della stessa pasta (marrone).

ckeditor anche, ma almeno da’ meno errori ed ha alcune interessanti bottoni:

  • copia da word (che elimina gli stupidi tag di formattazione che word insiste a mettere)

  • inserisci immagine fatto molto carino, con la possibilita’ di implementare le azioni per mostrare la lista immagini e caricare una immagine.

Se ti capita di avere problemi al secondo refresh ajax, questo codice ti puo’ tornare utile:


        Yii::app()->clientScript->registerScript($id, "

            if (typeof CKEDITOR.instances['{$id}'] != 'undefined') {

                CKEDITOR.instances['{$id}'].destroy(true);

            }

            $('#{$id}').ckeditor({$options});

        ");

confermo… questi widget sono assurdi! purtroppo però sono utili per l’utente :D

il problema che ho non è sul refresh…

io mi invio la view con un renderPartial in una richiesta json, poi la renderizzo dopo con jquery. $(div).html(data);

Nella view interessata, ho provato a metterci il maledetto widget ckeditor.

l’errrore riportato è quello che dicevo sopra:




GET http://localhost/rpm_yii/admin/viewpresentato/config.js?t=B8DJ5M3 400 (Bad Request) config.js:1

GET http://localhost/rpm_yii/admin/viewpresentato/skins/kama/editor.css?t=B8DJ5M3 400 (Bad Request) editor.css:1

GET http://localhost/rpm_yii/admin/viewpresentato/lang/it.js?t=B8DJ5M3 400 (Bad Request) it.js:1

Uncaught TypeError: Cannot read property 'options' of undefined



invece ckeditor.js vieni caricato correttamente. superbohh?!