2 Stimmen

Wie man JS-Skript angibt, das nach einem Ajax-Aufruf in CListView eingeschlossen werden soll

Nach einem Ajax-Aufruf rufe ich eine Funktion auf

$this->widget('zii.widgets.CListView', array(
            'viewData'=>array('sent'=>$sent),
            'dataProvider'=>$dp,
            'pager' => array(
                            'prevPageLabel'=>'< Anterior',
                            'nextPageLabel'=>'Siguiente >',
                            'header'=>'Pagina: ',
                            'pageSize'=>5,),
            'template'=>"{items}\n{pager}", //template
            'itemView'=>'_messageView',
            'emptyText'=>'No ha recibido ningun mensaje todavia',
            'enablePagination'=>true,
            'baseScriptUrl'=>'/../../Javascript/messages/messages.js',
            'afterAjaxUpdate' => 'js:callFunction()',
            'id'=>'listMessages',
        ));

Die Funktion callFunction() ist in einer separaten js-Datei definiert, die ich beim ersten Laden der Seite einbinde, wie folgt:

Die Funktion wird beim ersten Laden der Seite aufgerufen, aber nach einem Ajax-Aufruf wird sie nicht mehr aufgerufen. Ich vermutete, dass es daran lag, dass die message.js-Datei nicht gefunden werden konnte, also versuchte ich, sie erneut einzubinden, indem ich diesen Code zum CListView hinzufügte: 'baseScriptUrl'=>'/../../Javascript/messages/messages.js', aber jetzt erhalte ich diesen Fehler: jQuery("#listMessages").yiiListView ist keine Funktion ... Irgendwelche Ideen?

Lösung

                    $this->widget('zii.widgets.CListView', array(
                    'dataProvider'=>$ligas,
                    'viewData'=>array('joinedArray'=>$joinedArray),
                    'template'=>"{items}", //template
                    'itemView'=>'_viewLiga',
                    'emptyText'=>'Usted todavia no se ha unido a ninguna liga',
                    'afterAjaxUpdate'=>'js:function(id, data) {myLigasListUpdated();}',
                    'enablePagination'=>false,
                    'id'=>'listViewMyLigas',
                ));

Das Problem lag in der Signatur der Funktion, die nach einem Ajax-Update aufgerufen werden musste. Es musste so sein, wie in der Lösung angegeben. Danke @jfriend00

1voto

jfriend00 Punkte 632952

Es besteht nie die Notwendigkeit, eine Skriptdatei neu zu laden, um darin enthaltene Funktionen zu verwenden, es sei denn, Sie sind auf eine neue Seite gegangen oder in einen anderen Bereich gegangen, der die Funktionen nicht sehen kann, oder es wurde etwas das Skript-Tag zerstört. Wenn Sie sich immer noch auf derselben Seite und in einem geeigneten Bereich befinden, sind die Funktionen immer noch vorhanden. Sie sollten sich darauf konzentrieren, warum die Funktionen nicht funktionieren, anstatt zu versuchen, eine Skriptdatei ein zweites Mal zu laden.

Wenn Sie uns den tatsächlich generierten JavaScript-Code vorlegen können, der den AJAX-Aufruf enthält, können wir Ihnen dabei helfen herauszufinden, warum er beim zweiten Mal nicht funktioniert. Es ist viel besser, die Ursache zu beheben, anstatt einen Hack zu verwenden, um das Neuladen zu umgehen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X