Доступ к переменной $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. Посмотрите этот пост:

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/

Другие вопросы по тегам