我有 CListView 并在内部重新编辑了一个具有按钮的视图,单击它会打开一个 CJUIDialog。
但是当我使用页面控制器进入下一页时。CJUIDialog 内容无需单击按钮即可加载到页面。
知道为什么会这样吗?
如果有人可以帮助我,那就太好了。谢谢!
好的,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>