2013-02-23 112 views
3

我正在使用yii-bootstrap扩展名,并希望使用复选框按钮组。渲染它的功能没有问题,但我不知道如何阅读哪个按钮被检查,哪些不是。是否有可能将每个复选框绑定到模型的属性?如何从yii中的引导复选框按钮获取值?

这是我迄今为止所使用(它实际上是一个从警予,引导网站的精确副本):

<?php $this->widget('bootstrap.widgets.TbButtonGroup', array(
    'type' => 'primary', 
    'toggle' => 'radio', // 'checkbox' or 'radio' 
    'buttons' => array(
    array('label'=>'Left'), 
    array('label'=>'Middle'), 
    array('label'=>'Right'), 
), 
)); ?> 

回答

2

我检查了TbButtonGroup的来源,似乎没有成为的一种方式将每个复选框绑定到一个属性。但是,您可以使用数据属性将每个按钮链接到代表模型属性的隐藏字段。这可能是下一个最接近的事情,可能也需要最少量的代码。这里是你如何能做到这一点:

PHP:要求您有存储在一个变量名为$模型的模型。放在表单标签中。确保jQuery已加载。

$this->widget('bootstrap.widgets.TbButtonGroup', array(
    'type' => 'primary', 
    'toggle' => 'radio', // 'checkbox' or 'radio' 
    'buttons' => array(
    array('label'=>'Left', 'htmlOptions' => array(
     'data-field' => 'Model_left', 
     'data-value' => 1, 
    )), 
    array('label'=>'Middle', 'htmlOptions' => array(
     'data-field' => 'Model_middle', 
     'data-value' => 2, 
    )), 
    array('label'=>'Right', 'htmlOptions' => array(
     'data-field' => 'Model_right', 
     'data-value' => 3, 
    )), 
), 
)); 
echo CHtml::activeHiddenField($model, 'left'); 
echo CHtml::activeHiddenField($model, 'middle'); 
echo CHtml::activeHiddenField($model, 'right'); 

在上面的代码,需要与您的型号名称和离开的话,中间被替换的单词模型,对需要与模型的属性所取代。数据值需要设置为您希望每个按钮代表的值。

的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); 

然后,你可以提交表单正常。

+0

THX很多!我刚刚回顾了你的回答,因为我在上个月没有时间了。无论如何,我发现它非常鼓舞人心。我只是做了一些修改,使其完全符合我的意愿。 我会在另一个答案中发布我的结果代码。 – gooy 2013-04-03 15:30:20

4

我需要这个按钮组选择哪个应该细节上被用于在搜索进行过滤。这就是为什么我在我的模型中有一些帮助属性(在这些示例中坚持命名约定)$ 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专家。

0

您可以只设置为每个按钮的ID:

<?php $this->widget('bootstrap.widgets.TbButtonGroup', array(
    'type' => 'primary', 
    'toggle' => 'radio', // 'checkbox' or 'radio' 
    'buttons' => array(
    array('label'=>'Left', 'url' => '#', 'linkOptions'=>array('id' => 'btn_1')), 
    array('label'=>'Middle', 'url' => '#', 'linkOptions'=>array('id' => 'btn_2')), 
    array('label'=>'Right', 'url' => '#', 'linkOptions'=>array('id' => 'btn_3')), 
), 
)); ?> 
相关问题