来自Ajax请求的Yii CJuiAutoComplete数据

时间:2011-08-09 22:11:49

标签: autocomplete drop-down-menu yii

我有一个我正在构建的应用程序的任务表单,它允许我指定分配给它的联系人。我使用以下代码在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还是一个新手,所以我一直在阅读维基/论坛帖子,了解这些事情是如何完成的。非常感谢任何帮助,谢谢!

1 个答案:

答案 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); }'