Доступ к переменной $ data из кнопок в cgridview - PullRequest
4 голосов
/ 04 апреля 2011

Есть ли способ получить доступ к модели, расположенной в переменной $data, из CButtonColumn? Ниже код не работает.

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

Ответы [ 5 ]

5 голосов
/ 29 февраля 2012

Можно получить доступ к видимым атрибутам из jquery:

'click'=>'js:function(){alert("first element in cgridview is"+$(this).parent().parent().children(":nth-child(1)").text());}'
5 голосов
/ 12 марта 2013

Единственное поле, где $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

1 голос
/ 04 апреля 2011

Похоже, _id является частной переменной (в соответствии со стандартами кодирования Yii). Вы не можете получить доступ к закрытым переменным (и методам) вне объекта. Создайте метод получения в вашей модели следующим образом:

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 голосов
/ 02 мая 2017

Вы можете сделать это с помощью пользовательской функции, так как мы можем получить переменную $ data внутри нее, чтобы мы могли использовать как лучший php, так и сам yii.

Попробуйте так:

'test' => array(
          'label' => 'Select',
          'click' => function($data) {
            $id = $data->id;
            return "js:function() { alert($id); return false;}";
           },
     ),
0 голосов
/ 07 января 2015

Вам необходимо настроить класс CButtonColumn.Посмотрите этот пост:

http://www.yiiframework.com/wiki/714/yii-1-1-cgridview-use-special-variable-data-in-the-options-of-a-button-i-e-evaluate-options-attribute/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...