怎样赋值给CButtonColumn的click参数

在$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函数里面呢?

‘click’=>‘js:function(){setHomepage("$data->id"); return false;}’,

试试

结果是一样的~不行

刚才看了一下文档,

‘url’ 和 ‘visible’ 才支持 PHP expression。

建议直接把参数附加到url,然后用ajax请求。

太感谢你了,我怎么一开始没有想到呢 :)

我给URL赋值后就链接走了,如何再用ajax,请指教,最好给个例子哈。谢谢

你是如何处理的,能把代码贴出来看看嘛?我遇到了同样的问题

在admin.php 视图中用浏览器查看源码 找到删除按钮的源码 那个就是例子 :lol:

其实很容易 构造好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;

});



:D 我上面给出的只是我所想到的 你也可以模拟下面的代码 做出来 如果要深入了解 必须要读 jquery.yiigridview.js 的源码 查看update方法的实现 你才能彻底明白