2

CGridView 小部件已经具有查看、更新、删除选项。但我在我的基于 jquery 移动的项目中使用 CListView 小部件,但在为删除选项创建 ajax 链接时遇到问题。不知道如何在_view.php(视图文件)及其renderPartial()视图文件中创建一个ajax删除链接以在成功删除后消失栏请提前感谢。这是用于编辑和删除的 _view.php 文件链接。

<?php 
echo CHtml::link(CHtml::encode($data->id), 
    array('editmember1', 'id' => $data->id), 
    array('data-role' => 'button', 'data-icon' => 'star')
);

echo CHtml::link(CHtml::encode($data->id), $this->createUrl('customer/delete', array('id' => $data->id)), 
    array(
       // for htmlOptions
       'onclick' => ' {' . CHtml::ajax(array(
       'beforeSend' => 'js:function(){if(confirm("Are you sure you want to delete?"))return true;else return false;}',
       'success' => "js:function(html){ alert('removed'); }")) .
       'return false;}', // returning false prevents the default navigation to another url on a new page 
       'class' => 'delete-icon',
       'id' => 'x' . $data->id)
   );

?>

4

1 回答 1

5

发生这种情况是因为:

  1. 未调用正确的操作,因为您尚未设置 的url属性jQuery.ajax()。你应该知道 YiiCHtml::ajax是建立在 jQuery 的 ajax 之上的。所以你可以添加:

    CHtml::ajax(array(
      ...
      'url'=>$this->createUrl('customer/delete', array('id' => $data->id,'ajax'=>'delete')),
      ...
    ))
    

    同样在 url 中,我传递了一个 ajax 参数,以便该操作明确知道它是一个 ajax 请求。

  2. 然后控制器操作默认(即 Gii 生成的 CRUD)期望请求是 post 类型,您可以在 customer/delete 操作行中看到这一点if(Yii::app()->request->isPostRequest){...}:所以你必须发送一个 POST 请求,再次修改 ajax 选项:

    CHtml::ajax(array(
      ...
      'type'=>'POST',
      'url'=>'',// copy from point 1 above
      ...
    ))
    
  3. 或者,您也可以使用CHtml::ajaxLink().

  4. 要在删除后更新 CListView,请调用$.fn.yiiListView.update("id_of_the_listview");. 就像是:

    CHtml::ajax(array(
      ...
      'type'=>'POST',
      'url'=>'',// copy from point 1 above
      'complete'=>'js:function(jqXHR, textStatus){$.fn.yiiListView.update("mylistview");}'
      ...
    ))
    
于 2012-06-28T07:24:30.847 回答