0

私は CListView を持っていて、ボタンのあるビューを im redering の中でクリックすると、CJUIDialog が開きます。

しかし、ページコントローラーを使用して次のページに進むと。ボタンをクリックせずに CJUIDialog コンテンツがページにロードされます。

なぜそれがそのようになるのか、何か考えはありますか?

誰かが私を助けてくれれば、それは素晴らしいことです。ありがとう!

4

1 に答える 1

1

OK、Yii は多くのコントロールの ID を自動的に生成するので、イベントとの衝突を避けるために、次の方法でアイテム ビューからインタラクション処理を取り除くことをお勧めします。

CListView が生成されるページで:

$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_post',   // refers to the partial view named '_post'
    'sortableAttributes'=>array(
        'title',
        'create_time'=>'Post Time',
    ),
));
$this->beginWidget('zii.widgets.jui.CJuiDialog', array(
    'id'=>'dialog',
    'options'=>array(
        'title'=>'Dialog',
        'autoOpen'=>false,
    ),
));
$this->endWidget('zii.widgets.jui.CJuiDialog');

アイテム ビュー ページで:

echo CHtml::htmlButton('Button',array('onclick' => '$("#dialog").dialog("open");'));

データ行で何かを行う必要がある場合 (そのデータの id プロパティを使用するなど)、ボタンがクリックされたときにデータを受け取るカスタム JavaScript 関数を作成できます。

echo CHtml::htmlButton('Button',array('onclick' => 'myFunction('.$data->id.')'));

そして、前の例は次のようになります。

<?php
$this->widget('zii.widgets.CListView', array(
    'dataProvider'=>$dataProvider,
    'itemView'=>'_post',   // refers to the partial view named '_post'
    'sortableAttributes'=>array(
        'title',
        'create_time'=>'Post Time',
    ),
));
$this->beginWidget('zii.widgets.jui.CJuiDialog', array(
    'id'=>'dialog',
    'options'=>array(
        'title'=>'Dialog',
        'autoOpen'=>false,
    ),
));
$this->endWidget('zii.widgets.jui.CJuiDialog');
?>
<script type="text/javascript">
function myFunction(id) {
    // you can put whatever you need inside the dialog 
    $("#dialog").html(id);
    // open the dialog
    $("#dialog").dialog("open");
}
</script>
于 2012-05-29T12:20:21.633 に答える