2015-02-08 45 views
2

好吧我正在嘗試使用Kartik Depdrop小部件,我得到的白色下拉列表中的值不顯示在從屬下拉列表中。Yii2:使用Kartik Depdrop Widget?

我有一個狀態模型和一個城市模型,我把它設置成這樣。

在_form.php這個

$catList=ArrayHelper::map(app\models\State::find()->all(), 'id', 'state_name'); 
    echo $form->field($model, 'state')->dropDownList($catList, ['id'=>'state_name']); 

echo $form->field($model, 'district_city')->widget(DepDrop::classname(), [ 
'options'=>['id'=>'district_city'], 
'pluginOptions'=>[ 
'depends'=>['state_name'], // the id for cat attribute 
'placeholder'=>'Select...', 
'url'=> \yii\helpers\Url::to(['patient-entry/subcat']) 
] 
]); 
    ?> 

然後在模型

public static function getCity($city_id) { 
     $data=\app\models\City::find() 
     ->where(['state_name'=>$city_id]) 
     ->select(['id','city_name'])->asArray()->all(); 

      return $data; 
     } 

然後在我的控制器

public function actionSubcat() { 
     $out = []; 
     if (isset($_POST['depdrop_parents'])) { 
     $parents = $_POST['depdrop_parents']; 

     if ($parents != null) { 
     $cat_id = $parents[0]; 
     $out = \app\models\PatientEntry::getCity($cat_id); 
     echo Json::encode(['output'=>$out, 'selected'=>'']); 
     return; 
     } 
     } 
     echo Json::encode(['output'=>'', 'selected'=>'']); 
     } 

當我選擇狀態字段,Firebug控制檯正確顯示數據如:

{"output":[{"id":"172","city_name":"Along"},{"id":"173","city_name":"Bomdila"},{"id":"174","city_name":"Itanagar"},{"id":"175","city_name":"Naharlagun"},{"id":"176","city_name":"Pasighat"}],"selected":""} 

城市字段下拉列表也顯示爲已填充數據,但只顯示空格。

我在做什麼錯在這裏?

謝謝。

回答

11

好,我找到了解決辦法,所有的代碼是好的,其實depdrop部件尋找一對idname,如:

// the getSubCatList function will query the database based on the 
     // cat_id and return an array like below: 
     // [ 
     // ['id'=>'<sub-cat-id-1>', 'name'=>'<sub-cat-name1>'], 
     // ['id'=>'<sub-cat_id_2>', 'name'=>'<sub-cat-name2>'] 
     // ] 

因此我在模型中已經改變了代碼

->select(['id','city_name'])->asArray()->all(); 

with 

->select(['id','city_name AS name'])->asArray()->all(); 

就是這樣,它現在工作正常。希望有人會發現這有用。

+0

感謝。爲我工作。 – Tanmay 2016-04-20 02:53:55

0

而是改變Select語句,你也可以的:

echo $form->field($model, 'district_city')->widget(DepDrop::classname(), [ 
'options'=>['id'=>'district_city'], 
'pluginOptions'=>[ 

//// change default 'nameParam'=>'name' to 

'nameParam'=>'city_name', 
'depends'=>['state_name'], // the id for cat attribute 
'placeholder'=>'Select...', 
'url'=> \yii\helpers\Url::to(['patient-entry/subcat']) 
] 
]); 
    ?> 

變化 'nameParam' 到 'CITY_NAME'

相關問題