2013-08-01 42 views
3

我在Yii是全新的,所以,如果這個問題的答案有點微不足道,不好意思。在插入新元素後更新Yii Dropdownlist [已解決]

這裏是我的代碼:

<p> 
    <?php echo $form->labelEx($model,'phone_type'); ?> 
    <span class="field"> 
    <?php echo $form->dropDownList($model,'phone_type', 
    CHtml::listData(PhonesTypes::model()->findAll(), 
'id','type')); ?>  
    <?php echo $form->error($model,'phone_type'); ?> 
</span>         
</p> 

將會有一個按鈕來註冊新的手機類型。所以,在表單的子表單之後,這將在CJUiDialog中,我希望上面的dropDownList用新類型更新,而不刷新頁面。

我google了很多,但我只找到有關「依賴下拉」Yii的事情。

解決此問題的更好方法是什麼?有沒有像$.fn.cgridview.update

這裏的對話框代碼:

<?php $this->endWidget('zii.widgets.jui.CJuiDialog'); 

    $this->beginWidget('zii.widgets.jui.CJuiDialog', array(
    'id'=>'dialog-crud', 
    'options'=>array(
    'title'=>'Create new Phone Type', 
    'autoOpen'=>false, 
    'modal'=>true, 
    'width'=>1080, 
    'height'=>820, 
    'resizable'=>false 
    ), 
)); 
?> 

<iframe src="http://myapp/phone_types/create" width="100%" height="100%"></iframe> 

<?php $this->endWidget(); ?> 

和控制器的代碼,是一個簡單的創建功能:

public function actionCreate(){ 

$model = new PhoneType; 

if(isset($_POST['PhoneType'])){ 

    $model->attributes = $_POST['PhoneType']; 

    if($model->save()){ 

    //----> some suggestion here? echo CHtml::script(""); 
    Yii::app()->end(); 

    } 
} 
} 

所以,下面是我的解決方案的代碼。 在視圖:

<?php $this->beginWidget('zii.widgets.jui.CJuiDialog', array(
    'id'=>'dialog', 
    'options'=>array(
    'title'=>'Phone Types', 
    'autoOpen'=>false, 
    'modal'=>true, 
    'width'=>1080, 
    'height'=>820, 
    'resizable'=>false 
), 
)); 
?> 
<iframe src="phoneTypes/create" id="cru-frame" width="100%" height="100%"></iframe> 
<?php $this->endWidget(); ?> 

在我PhoneTypesController:

public function actionCreate(){ 

    $model = new PhoneTypes; 

    if(isset($_POST['PhoneTypes'])){ 

     $model->attributes = $_POST['PhoneTypes']; 

     if($model->save()){    

      echo CHtml::script(" 
       window.parent.$('#dialog').dialog('close'); 
       window.parent.$('#Phone_types_id').append('<option value=".$model->id." >'+'".$model->type."'+'</option>'); 
      "); 

      Yii::app()->end();     
     } 
    } 

    $this->render('create',array(
     'model'=>$model, 
    )); 
} 

感謝您的幫助!

+0

也許在對話框中發佈您的代碼,並且在這種情況下控制器操作將會很有幫助。 –

+0

嗨,@SamuelLiew。謝謝你的時間。我把上面的控制器和對話框的代碼。 –

回答

0

您可能有添加手機類型的操作(對於此示例,我們將其稱爲phoneType/create)。

當您向該操作發送ajax請求以創建您的手機類型時,該操作應返回新創建的手機類型信息。然後,您可以使用jQuery將其添加到您的下拉菜單中。

請看下面的例子:

<?php 
// In protected/controllers/PhoneTypeController.php 
public function actionCreate($phoneType) 
{ 
    $phoneType = new PhoneType; 
    $phoneType->phone_type = $phoneType; 
    if ($phoneType->save()) 
    { 
     echo CJSON::encode(array('value' => $phoneType->id, 'label' => $phoneType->phone_type)); // echos something like {"value":5,"label":"test"} 
    } 
} 
?> 

在這個例子中的休息,我會假設你的原始模型(你有PHONE_TYPE視野中的一個)被稱爲公司(本有衝擊在下面的jQuery代碼中我選擇你的phone_type下拉菜單)。

然後,您可以使用你的Ajax功能的成功回調這個輸出到一個新的選項添加到您的選擇(IE下拉菜單):

jQuery.get(// your 'data' and 'url' here 
    success: function(data) { 
     $('#Company_phone_type').append('<option value="' + data.value + '">' + data.label + '</option>'); 
}); 

有關如何做到這一點jQuery的更多信息,請參閱到Adding options to a select using Jquery/javascript

+0

感謝您的回覆!看來,這正是我正在尋找的!我會嘗試做好準備並適應我的情況!祝一切順利! –

+0

非常歡迎!如果我回答了您的問題,請將我的答案標記爲「已接受」。謝謝 :-) –