我需要这个按钮组来选择哪些详细信息应该用于在搜索中进行过滤。这就是为什么我的模型中有一些辅助属性(在这些示例中遵循命名约定)$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与frostyterrier发布的完全相同
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 专家。