Yii菜单linkOptions无法使用ajax

时间:2014-12-11 10:44:40

标签: php jquery ajax yii

我试图在CJuiDialog中显示CGridView但面临一些问题。 在我看来,我创建了一个菜单项如下:

$this->menu = array(
    array('label' => Yii::t('app', 'Afficher les participants ayant fourni cette information'), 
        'url' => array('Participant/ShowParticipantInfo', 'id' => $model->id_info),
        'linkOptions' => array(
            //'onclick' => "{viewP(); $('#dialogViewP').dialog('open'); return false}",
            'ajax' => array(
                'type' => 'POST',
                'url' =>"js:$(this).attr('href')", //array('Participant/ShowParticipantInfo', 'id' => $model->id_info),
                'update' => '#divForForm2',
            ),
        ),
);

然后我创建了对话框:

<?php $this->beginWidget('zii.widgets.jui.CJuiDialog', array(
        'id' => 'dialogViewP',
        'options' => array(
            'title' => 'Liste des participants ayant fourni cette information',
            'autoOpen' => false,
            'modal' => true,
            'width' => 500,
            'height' => 300,
        ),
     ));
    ?>
    <div id="divForForm2"></div>
    <?php $this->endWidget('dialogViewP'); ?>

我的控制器看起来像这样:

public function actionShowParticipantInfo($id){
        $rows = Participant::findParticipantInfo($id);

            $result = array();
            foreach ($rows AS $key => $val){
                $result[] = array('id' => $key +1, 'value' => $val['NomComplet']);
            }
            $arrayDataProvider = new CArrayDataProvider($result, array(
                'id' => 'id',
                'pagination' => array(
                    'pageSize' => 10,
                ),
            ));
        if(Yii::app()->request->isAjaxRequest){

            $this->renderPartial('_showparticipant', array(
                    'arrayDataProvider' => $arrayDataProvider,
                    ), false, true);
            echo CHtml::script('$("#dialogViewP").dialog("open")');
            Yii::app()->end();
        }
    }

但是点击菜单项,可以显示任何对话框。我不知道为什么。有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

我认为菜单项中不应该同时包含'url'和'linkOption'属性。任意一个。 通过网络开发工具,您需要检查如果您在菜单项单击时有ajax XHR。

如果你想要实现ajax manu,我建议你this extention

即使您发起ajax请求,响应也无法激活隐藏对话框,因为成功时您只能更新某个div #divForForm2,但对话窗口仍然关闭:'autoOpen' => false。我建议在ajax成功时加入开放对话框。

 'ajax' => array(
       'type' => 'POST',
       'url' => array('Participant/ShowParticipantInfo', 'id' => $model->id_info),
       'success' =>'js:{function(data){$("#divForForm2").html(data); $("#dialogViewP").dialog("open");}' 
        ),