Как указать JS-скрипт для включения после вызова ajax в CListView - PullRequest
2 голосов
/ 31 июля 2011

После вызова ajax я вызываю функцию

$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',
        ));

Функция callFunction () определена в отдельном js-файле, который я включаю при первой загрузке страницы, например:

<script type="text/javascript" src="/../../Javascript/messages/messages.js"></script>

Функция вызывается при первой загрузке страницы, но после вызова ajax она больше не вызывается. Я подозревал, что это потому, что не удалось найти файл message.js, поэтому я попытался включить его снова, добавив этот фрагмент кода в определение CListView: 'baseScriptUrl'=>'/../../Javascript/messages/messages.js', но теперь я получаю эту ошибку: jQuery("#listMessages").yiiListView is not a function ... Есть идеи?

Решение

                    $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',
                ));

Проблема была в сигнатуре функции, которую нужно было вызывать после обновления ajax. Это должно быть как указано в решении. Спасибо @ jfriend00

1 Ответ

1 голос
/ 31 июля 2011

Нет необходимости перезагружать файл сценария, чтобы использовать в нем функции, если только вы не перешли на новую страницу или не перешли в другую область, в которой функции не видны, или если что-то не уничтожило тег сценария. Если вы все еще находитесь на той же странице и по-прежнему находитесь в соответствующей области, то функции все еще там. Вам следует сконцентрироваться на том, почему функции не работают, а не пытаться загрузить файл сценария во второй раз.

Если вы можете показать нам фактический сгенерированный javascript, содержащий вызов ajax, мы можем помочь вам выяснить, почему он не работает во второй раз. Гораздо лучше исправить основную причину, а не искать обходной путь перезагрузки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...