2011-04-04 61 views
4

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

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

所以你输出PHP $数据 - > id变量进入的onClick JS?我不确定这会起作用。 $ data变量只有在'click'字符串是Yii的eval()'d时才可用,并且我认为js:perfix可以阻止它成为eval()'d并将其输出为字符串?嗯 – thaddeusmt 2011-04-06 16:46:11

+0

你解决了这个?否则看看我的答案。 – Jigar7521 2017-05-02 12:27:04

回答

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;}', 
      ), 
     ), 
), 
+0

是的,但仍然存在主要问题:未定义的变量:数据。如果我在原始列类型中重新使用$数据 - 它会工作。 – gryfi 2011-04-04 20:37:16

+0

有趣的是,有额外的领域'网址'访问。错误? – gryfi 2011-04-04 20:54:58

+0

恩格里......昨天说错了。再次尝试上面的代码(从$ data-> id中删除“'。) – Roman 2011-04-05 10:58:07

5

它可以从jQuery的访问,可以看到属性:

'click'=>'js:function(){alert("first element in cgridview is"+$(this).parent().parent().children(":nth-child(1)").text());}' 
5

$data允许在CButtonColumn类中是urlimageUrlvisible。要将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类

0

你可以通过自定义函数,我们可以得出它里面一个$数据变量,以便我们能够更好地利用PHP以及警予本身。

尝试这样的:

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

由于* StackOverflow *有意成为一个站点,您不仅可以提出问题,让他们回答问题,还可以找到已回答的问题。虽然这可能会回答这个问题,但如果您将其中的一些解释包含在内,更多的读者可能会从中受益。 – derM 2017-05-02 12:01:11

+1

好的,谢谢derM – Jigar7521 2017-05-02 12:20:38