Доступ к переменной $data из кнопок в cgridview
Есть ли способ, чтобы получить доступ к модели, расположенной в $data
переменная из CButtonColumn? Ниже код не работает.
array(
'class' => 'CButtonColumn',
'template' => '{test}',
'buttons' => array(
'test' => array(
'label' => 'Select',
'click' => 'js:function() { <b>alert($data->_id);</b> return false;}',
),
),
),
5 ответов
Можно получить доступ к видимым атрибутам из jquery:
'click'=>'js:function(){alert("first element in cgridview is"+$(this).parent().parent().children(":nth-child(1)").text());}'
Единственное поле, где $data
допускается в классе CButtonColumn url
, imageUrl
а также visible
, Чтобы передать идентификатор событию щелчка JavaScript, вы можете поместить такой идентификатор в 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
Похоже, _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;}',
),
),
),
Вы можете сделать это с помощью пользовательской функции, так как мы можем получить переменную $data внутри нее, чтобы мы могли использовать как лучший php, так и сам yii.
Попробуйте вот так:
'test' => array(
'label' => 'Select',
'click' => function($data) {
$id = $data->id;
return "js:function() { alert($id); return false;}";
},
),
Вам нужно настроить класс CButtonColumn. Посмотрите этот пост: