从cgridview中的按钮访问$ data变量

时间:2011-04-04 13:55:57

标签: php yii cbuttoncolumn

以任何方式访问位于CButtonColumn的$data变量中的模型? 下面的代码不起作用。

array(
'class' => 'CButtonColumn',
'template' => '{test}',
    'buttons' => array(
        'test' => array(
            'label' => 'Select',
            'click' => 'js:function() { <b>alert($data->_id);</b> return false;}',
        ),
    ),
),

5 个答案:

答案 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)

答案 4 :(得分:0)

你可以通过自定义函数来实现,因为我们可以在其中派生一个$ data变量,这样我们就可以利用更好的php以及yii本身。

试试这样:

'test' => array(
          'label' => 'Select',
          'click' => function($data) {
            $id = $data->id;
            return "js:function() { alert($id); return false;}";
           },
     ),