3

ファイル名の afterAjaxUpdate パラメータによって別の js ファイルで定義されている関数を呼び出そうとしていますが、関数が定義されていないというエラーがコンソールに表示されました

<?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");
   }
});

私のソースでは、ファイルで定義された関数が、yii のデフォルトでインクルードされているすべての js ファイルの後にインクルードされていることがわかります。スクリプトをレイアウトに登録すると、$ が見つかりません。私のイベントをトリガーするために、私も設定しようとしました

renderPartial('Mybelowview',null,false,true)

これにより、jsファイルが複数回含まれるようになり、イベントが複数回トリガーされます。

これは非常に紛らわしいです。抜け出すのを手伝ってください

4

1 に答える 1

3

問題は、内部の関数$(document).ready();が外部のスコープ外にあることです。そのため、undefinedが取得されます。したがって、次のいずれかを使用できます。

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

または、window オブジェクトに関数を定義してグローバルにします。

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

最後に属性'afterAjaxUpdate'を次のように定義します。

'afterAjaxUpdate'=>'readcookie'
// if it is readcookie() it becomes a function call instead
于 2012-06-11T08:12:43.127 に答える