検索でのフィルタリングに使用する詳細を選択するには、このボタン グループが必要でした。そのため、モデルに $leftSearch、$middleSearch、$rightSearch という名前のヘルパー属性をいくつか用意しました (これらの例では命名規則に従います)。
ユーザーの選択に応じて、ボタンを押し込んだり押し込んだりしたままにしたかったのです (そうしないと、更新のたびにボタンが押されなくなり、ユーザーには表示されない非表示のフィールドに検索属性が保存されるため、混乱する可能性があります)。 )。私はそれを使用してそれを達成しました
'active' => ($model->leftSearch)?true:false,
もう 1 つの問題は、ユーザーがページを送信する前に選択した内容によって異なるデータ値でした。それは以下で行われました:
'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 の専門家ではありません。