Кнопка Yii CGridView - вызов параметризованной функции JavaScript
Мне нужно создать CGridView с одной кнопкой и сделать функцию вызова кнопки JavaScript следующим образом:
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'projectCities',
'summaryText' => '',
'dataProvider' => $model->getCitiesProvider(),
'columns' => array(
'name',
'directional',
'customCount',
array(
'class'=>'CButtonColumn',
'template'=>'{delete}',
'buttons' => array(
'delete' => array(
'url' => '',
'click' => '',
'options' => array(
'onclick' => 'removeCity(this, $data->idCity,
$model->idProject); return false;',
),
)
),
)
),
));
Конечно, это не работает, потому что сгенерированный HTML-код:
<a class="delete" title="Delete" onclick="removeCity(this, $data->idCity, $model->idProject); return false;">
Есть ли способ сделать это, чтобы в вызове функции JavaScript был правильный идентификатор?
3 ответа
//Controller:
public function gridButtons($model)
{
return array(
'class'=>'CButtonColumn',
'template'=>'{delete}',
'buttons' => array(
'delete' => array(
'url' => '',
'click' => '',
'options' => array(
'onclick' => sprintf(
'js:removeCity(this, %d, %d);return false;',
$model->idCity, $model->idProject
),
),
)
),
)
}
//view
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'projectCities',
'summaryText' => '',
'dataProvider' => $model->getCitiesProvider(),
'columns' => array(
'name',
'directional',
'customCount',
array(
'value' => array($this, 'gridButtons'),
),
),
));
Я столкнулся с этой проблемой, а также решил эту проблему. Может быть, ваша проблема заключается в закрытии массива 'option' после параметра 'click', в котором функция js остается. Но в этом случае массив 'option' закрывается перед параметром 'click' ниже. Пожалуйста, посмотрите это, может быть, это решить проблему вам помочь.
$this->widget('zii.widgets.grid.CGridView', array(
'id' => 'projectCities',
'summaryText' => '',
'dataProvider' => $model->getCitiesProvider(),
'columns' => array(
'name',
'directional',
'customCount',
array(
'class'=>'CButtonColumn',
'template'=>'{delete}',
'buttons' => array(
'delete' => array(
'url'=>'$data->id',
'visible'=>'true',
'options'=>array('class'=>'viewbtns'),
'click'=>'js: function(){ viewProfile((this).attr("href"),"openDialog" ); return false; }',
)
),
)
),
));
Вы можете использовать двойные кавычки для активации замены переменной в вашей строке:
'onclick' => "js:removeCity(this, {$data->idCity}, {$model->idProject}); return false;",