Функция обратного вызова afterAjaxUpdate CListView показывает undefined

Я пытаюсь вызвать функцию, которая определена в другом файле js с помощью параметра afterAjaxUpdate имени файла, но я получил ошибку в консоли, что функция не определена

<?php 
$dataProvider=new CActiveDataProvider('profiles',array('pagination'=>array('pageSize'=>3))); ?>
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_profilesview',
'template'=>'{sorter}<br />{pager}{items}{pager}',
    'enableSorting' => true,
    'sortableAttributes'=>array(
     'name'=>'By firstName',
     'location'=>'By city',
     'age'=>'By age',
     'likes'=>'By likes'
     ),
     'afterAjaxUpdate'=>'readcookie()',
));
 ?>

моя функция js

$(document).ready(function(){
   function readcookie()
   {
       alert("hi");
   }
});

Я вижу в своем источнике, что функция, определенная в файле, включается после всех файлов js, которые включены по умолчанию yii, когда я регистрирую свой сценарий в моем макете, он не находит $, потому что jquery не включен, когда я включаю jquery, он включается дважды, что приводит к запуску моего события, которое я также пытался, установив

renderPartial ('Mybelowview', ноль, ложь, истина)

что снова приводит к тому, что мой файл js включается несколько раз, а мои события запускаются несколько раз.

Это очень сбивает с толку, пожалуйста, помогите выбраться отсюда Спасибо всем за такую ​​щедрость


person Bipin Chandra Tripathi    schedule 09.06.2012    source источник
comment
вы включили файл js с функцией readcookie() в макет или представление?   -  person bool.dev    schedule 11.06.2012
comment
да. но когда я просматриваю исходный код HTML-страницы, обнаружил, что он вызывается после того, как yii включен JS-файл, поэтому я получил функцию ошибки undefined   -  person Bipin Chandra Tripathi    schedule 11.06.2012
comment
@ bool.dev теперь то, что я сделал, вместо вызова функции, которую я определил там, но я не считаю, что это хороший способ, так как мне придется определять его каждый раз, когда я буду использовать его где-нибудь еще, вы можете предложить мне правильный способ сделать это   -  person Bipin Chandra Tripathi    schedule 11.06.2012
comment
покажите мне код того, как вы это делали раньше, чтобы я мог воссоздать его здесь и посмотреть, что могло быть не так, как вы регистрировались и в каком файле / представлении / макете   -  person bool.dev    schedule 11.06.2012
comment
вот мой код pastebin.com/embed_js.php?i=BiihjQxe большое спасибо .   -  person Bipin Chandra Tripathi    schedule 11.06.2012


Ответы (1)


Проблема в том, что функции внутри $(document).ready(); находятся вне области видимости, и поэтому вы получаете undefined. Таким образом, вы можете просто иметь:

// $(document).ready(function(){
   function readcookie()
   {
       alert("hi");
   }
// });
// omit document.ready to make function available in the global scope

или определите функцию объекта окна, чтобы сделать его глобальным:

$(document).ready(function(){
   window.readcookie=function ()
   {
       alert("hi");
   };
});

Наконец, определите атрибут 'afterAjaxUpdate' как:

'afterAjaxUpdate'=>'readcookie'
// if it is readcookie() it becomes a function call instead
person bool.dev    schedule 11.06.2012
comment
обязательно проследите, если у вас есть сомнения или что-то еще - person bool.dev; 11.06.2012