【发布时间】:2014-06-05 00:24:23
【问题描述】:
是否可以更新 CListView 中的单个字段?我正在寻找一种解决方案,让用户在所有表记录的这个视图中编辑他们的记录。
一个例子是用户有一个相关约会的列表。他们可能希望快速将约会标记为优先级低/高,而无需转到更新视图本身。
这种功能除了 CListView 之外还有其他小部件吗?
抱歉,我在研究这个时遇到了一些死胡同,我可能错过了一些明显的盲目。
【问题讨论】:
是否可以更新 CListView 中的单个字段?我正在寻找一种解决方案,让用户在所有表记录的这个视图中编辑他们的记录。
一个例子是用户有一个相关约会的列表。他们可能希望快速将约会标记为优先级低/高,而无需转到更新视图本身。
这种功能除了 CListView 之外还有其他小部件吗?
抱歉,我在研究这个时遇到了一些死胡同,我可能错过了一些明显的盲目。
【问题讨论】:
没有奇迹般的解决方案,这取决于您要完成的任务;
如果你想有按钮来改变任务优先级,你可以使用ajax链接(http://www.yiiframework.com/doc/api/1.1/CHtml#ajaxLink-detail)。
如果你想内联编辑文本,你可以使用 Jeditable (http://www.appelsiini.net/projects/jeditable) 和一些 ajax 的组合来编辑文本,然后更新项目的内容。
顺便提醒一下,您可以使用 renderPartial method 将视图部分呈现为字符串(即 PHP 变量)。因此,您可以只渲染更新后的 CListView 项并将其返回给 ajax 回调以更新内容。
编码愉快!
【讨论】:
让我们说下面是您的列表视图
<?php $this->widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProvider,
'itemView'=>'_view',
'id'=>'itemList',
)); ?>
和你的部分(_view.php)
<?php echo CHtml::ajaxLink('Mark Status',array('appointment/update','id'=>$data->id),
array('type'=>'POST','success'=>'function(){loadListView()}'),
array('confirm'=>'Are you sure you want to mark complete this appointment?',
'id'=>'mark-'.$data->id)); ?>
重新加载所有网格(不是单个字段)的功能,因为更新的记录可能会影响其他数据。
<script type="text/javascript">
function loadListView(){
$.fn.yiiListView.update('itemList');
}
</script>
有一些参考可以作为你的例子
http://help.discretelogix.com/php/yii/enable-in-place-editing-in-yii-grid.htm
【讨论】:
你可以实现,
TbEditableColumn (YiiBooster) 或 EditableColumn (x-editable for Yii) 并即时编辑您的日期。在相关控制器中创建新的一些更新操作后,您只需要实现上述小部件之一,从 POST 请求接收数据并更新数据。
【讨论】: