Мне нужна была эта группа кнопок, чтобы выбрать, какие детали должны использоваться для фильтрации в поиске. Вот почему в моей модели были некоторые вспомогательные атрибуты, называемые (придерживаясь соглашения об именах в этих примерах) $leftSearch, $middleSearch и $rightSearch.
Я хотел, чтобы кнопки оставались нажатыми или выдвигаемыми в зависимости от выбора пользователя (иначе это могло бы запутать, потому что кнопки не нажимались бы после каждого обновления, но атрибуты поиска сохранялись бы в скрытых полях, которые пользователь не видит ). Я добился этого, используя
'active' => ($model->leftSearch)?true:false,
Еще одним моментом было значение данных, которое могло различаться в зависимости от того, что пользователь выбрал перед отправкой страницы. Это было сделано с помощью:
'data-value' => ($model->leftSearch)?0:1,
Полный код в представлении выглядит так:
$this->widget('bootstrap.widgets.TbButtonGroup', array(
'type' => 'primary',
'toggle' => 'checkbox',
'buttons' => array(
array('label'=>'Left',
'active' => ($model->leftSearch)?true:false,
'htmlOptions'=>array(
'data-field' => 'Model_leftSearch',
'data-value' => ($model->leftSearch)?0:1,
),),
array('label'=>'Middle',
'active' => ($model->middleSearch)?true:false,
'htmlOptions'=>array(
'data-field' => 'Model_middleSearch',
'data-value' => ($model->middleSearch)?0:1,
),),
array('label'=>'Right',
'active' => ($model->rightSearch)?true:false,
'htmlOptions'=>array(
'data-field' => 'Model_rightSearch',
'data-value' => ($model->rightSearch)?0:1,
),),
),
));
echo CHtml::activeHiddenField($model, 'leftSearch');
echo CHtml::activeHiddenField($model, 'middleSearch');
echo CHtml::activeHiddenField($model, 'rightSearch');
JavaScript остается точно таким же, как и то, что опубликовал морозный терьер.
Yii::app()->clientScript->registerScript('buttonGroup', "
$(function(){
$('.btn-group a').click(function(){
var fieldId = $(this).data('field');
var value = $(this).data('value');
$('#' + fieldId).val(value);
});
});
", CClientScript::POS_END);
Единственное, чего я не понимаю в части javascript, это то, что она работает при вставке в представление, как указано выше, но не работает, если включена в какой-либо внешний файл .js. Я предполагаю, что это как-то связано с POS_END, но я не эксперт по javascript.
person
gooy
schedule
03.04.2013