以任何方式访问位于CButtonColumn的$data
变量中的模型?
下面的代码不起作用。
array(
'class' => 'CButtonColumn',
'template' => '{test}',
'buttons' => array(
'test' => array(
'label' => 'Select',
'click' => 'js:function() { <b>alert($data->_id);</b> return false;}',
),
),
),
答案 0 :(得分:5)
可以从jquery访问可见属性:
'click'=>'js:function(){alert("first element in cgridview is"+$(this).parent().parent().children(":nth-child(1)").text());}'
答案 1 :(得分:5)
CButtonColumn类中唯一允许 $data
的字段是 url
, imageUrl
和 visible
。要将id传递给javascript click事件,您可以将此ID放在url中并从DOM中获取它。这是非常粗鲁的黑客,但很容易实现。
array(
'class' => 'CButtonColumn',
'template' => '{test}',
'buttons' => array(
'test' => array(
'label' => 'Select',
/* set id */
'url' => $data->id,
/* retrieve id from this DOM element (jQuery) */
'click' => 'function() { alert( $(this).attr("href"); return false;}',
),
),
),
如果您正在寻找更清晰的编码,您可以使用CDataColumn类
答案 2 :(得分:1)
看起来_id是一个私有变量(根据Yii的编码“标准”)。您无法访问对象外部的私有变量(和方法)。在模型中创建这样的getter方法:
public function getId() {
return $this->_id;
}
然后将您的代码更改为:
array(
'class' => 'CButtonColumn',
'template' => '{test}',
'buttons' => array(
'test' => array(
'label' => 'Select',
'click' => 'js:function() { alert($data->id); return false;}',
),
),
),
答案 3 :(得分:0)
您需要自定义CButtonColumn类。看看这篇文章:
答案 4 :(得分:0)
你可以通过自定义函数来实现,因为我们可以在其中派生一个$ data变量,这样我们就可以利用更好的php以及yii本身。
试试这样:
'test' => array(
'label' => 'Select',
'click' => function($data) {
$id = $data->id;
return "js:function() { alert($id); return false;}";
},
),