DavidHHuan
(Davidhhuan)
1
在$this->widget(‘zii.widgets.grid.CGridView’)的columns里面
array(
'class'=>'CButtonColumn',
'buttons'=>array(
'是'=>array(
'label'=>'是',
'url'=>'Yii::app()->createUrl("admin/product/setHomepage", array("id"=>$data->id))',
'click'=>'function(){setHomepage("$data->id"); return false;}',
),
),
'template'=>'{是}',
),
我想添加一个链接,点击之后会触发一个ajax的请求,对product数据库记录进行设置。
从上面的代码可以看出,我已经设置好
'click'=>'function(){setHomepage($data->id); return false;}'
但是我想把$data->id也作为参数传到setHomepage这个javascript函数里面的。
不过很明显,是不行的,会产生错误,原因我大概知道,是因为在CButtonColumn里面的registerClientScript()没有进行那个类似于这样的过滤
$this->evaluateExpression($button['visible'],array('row'=>$row,'data'=>$data))
它只是把传过来的的参数当作一般的字符串来处理。
我这样理解对吗?有没有什么其它方法可以做到,把$data->id传到setHomepage()这个javascript函数里面呢?
korui
(Korui)
2
‘click’=>‘js:function(){setHomepage("$data->id"); return false;}’,
试试
korui
(Korui)
4
刚才看了一下文档,
‘url’ 和 ‘visible’ 才支持 PHP expression。
建议直接把参数附加到url,然后用ajax请求。
11115
(天佑饭饭)
6
我给URL赋值后就链接走了,如何再用ajax,请指教,最好给个例子哈。谢谢
11115
(天佑饭饭)
7
你是如何处理的,能把代码贴出来看看嘛?我遇到了同样的问题
yiqing95
(Yiqing 95)
8
在admin.php 视图中用浏览器查看源码 找到删除按钮的源码 那个就是例子 
其实很容易 构造好url后 常规是点击会跳转页面的 你只需要标识这个链接 比如加个类
<a href="somelink" >someCommand</a>
//这样的代码默认会跳转的 但是你在构造时通过标识区分:
<a href="somelink" class="myCommand" >someCommand</a>
//接下来就是常规jquery编程的事了
$(".myCommand").live("click",function(e){
var url = $(this).attr("href");
$.post(url,function(response){
//分析response 如果符合条件 更新yiigridView : $.fn.yiiGridView.update('yourGridId');
});
//下面代码修改原始 a 元素的行为
return false;
e.preventDefault();//双重保险
});
为了防止你是个很懒得人 顺便给你找出 delete 的ajax实现:
jQuery('#user-profile-grid a.delete').live('click',function() {
if(!confirm('确定要删除这条数据吗?')) return false;
var th=this;
var afterDelete=function(){};
$.fn.yiiGridView.update('user-profile-grid', {
type:'POST',
url:$(this).attr('href'),
success:function(data) {
$.fn.yiiGridView.update('user-profile-grid');
afterDelete(th,true,data);
},
error:function(XHR) {
return afterDelete(th,false,XHR);
}
});
return false;
});
我上面给出的只是我所想到的 你也可以模拟下面的代码 做出来 如果要深入了解 必须要读 jquery.yiigridview.js 的源码 查看update方法的实现 你才能彻底明白