2013-02-23 60 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')), 
), 
)); ?> 
相關問題