我有一个我正在构建的应用程序的任务表单,它允许我指定分配给它的联系人。我使用以下代码在Yii中设置了一个依赖下拉列表:
echo $form->dropDownList($model,'associationType',
array('none'=>'None','contact'=>'Contact','sale'=>'Sale','account'=>'Account',
'project'=>'Project','case'=>'Case'),
array(
'ajax' => array(
'type'=>'POST', //request type
'url'=>CController::createUrl('tasks/parseType'), //url to call.
//Style: CController::createUrl('currentController/methodToCall')
'update'=>'#auto_complete', //selector to update
)
));
我要做的是使用CJuiAutoComplete小部件和dropDown指定要抓取的数组。因此,下拉选择为联系人,它应该获得联系人列表等。
以下是我对CJui小部件的了解
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'name'=>'auto_select',
'source' => $names,
'options'=>array(
'minLength'=>'2',
'select'=>'js:function( event, ui ) {
$("#'.CHtml::activeId($model,'associationId').'").val(ui.item.id);
return false;
}',
),
));
变量$ names现在只是一个占位符,但在我的控制器方法中,我传递了一个带有id和name的JSON编码数组。控制器代码:
public function actionParseType() {
//if(isset($_POST['TaskChild']['associationType'])){
//$type=$_POST['TaskChild']['associationType'];
$type='sale';
$sql = 'SELECT id, name FROM x2_'.$type.'s';
$cmd = Yii::app()->db->createCommand($sql);
$res = $cmd->queryAll();
echo CJSON::encode($res);
//}
}
现在我强迫它使用“Sale”但是当我调用这个方法时我什么也得不到,并且想知道如何解决这个问题。我对Yii还是一个新手,所以我一直在阅读维基/论坛帖子,了解这些事情是如何完成的。非常感谢任何帮助,谢谢!
答案 0 :(得分:2)
在你的控制器动作中尝试这样的事情:
$sql = 'SELECT people_id as id, CONCAT(first_name," ",last_name) as value, first_name as label FROM people WHERE first_name LIKE :qterm ORDER BY first_name ASC';
$command = Yii::app()->db->createCommand($sql);
$qterm = $_GET['term'].'%';
$command->bindParam(":qterm", $qterm, PDO::PARAM_STR);
$result = $command->queryAll();
echo CJSON::encode($result); exit;
然后您可以在小部件'选项'数组中使用它来检查它:'select'=>'js:function(event, ui) { console.log(ui.item.id +":"+ui.item.value); }'