0

プロジェクトに CJuiAutoComplete を実装しようとしていますが、機能していません。私は過去数日間問題を調査し、すべてを試しました。発生しているように見える (またはこの場合は発生していない) のは、コントローラーのルックアップ アクションが呼び出されていないことです。ソースをアイテムの単純な配列に設定すると、それを機能させることもできません。私は何を間違っていますか?

_form.php

            <?php $this->widget('zii.widgets.jui.CJuiAutoComplete', array(
                        'model' => $model,
                        'attribute' => 'zipcode',
                        'source' => $this->createUrl('address/lookup'),
                        'name' => 'zipcode',
                        'htmlOptions' => array('size'=>'5'),
                        'options' => array(
                            'showAnim'=>'fold',
                            'minLength' => 1,
                    )) ?>

AddressController.php

public function accessRules()
{
    return array(
        array('allow',  // allow all users to perform 'index' and 'view' actions
            'actions'=>array('index','view'),
            'users'=>array('*'),
        ),
        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions'=>array('create','update','lookup'),
            'users'=>array('@'),
        ),
        array('allow', // allow admin user to perform 'admin' and 'delete' actions
            'actions'=>array('admin','delete'),
            'users'=>array('admin'),
        ),
        array('deny',  // deny all users
            'users'=>array('*'),
        ),
    );
}


    public function actionLookup()
    {
        echo "Lookup Action";
    }
4

3 に答える 3

0

これを試してみてください。あなたにとっては非常に簡単です..

public function actionAutoCompleteLookup()
        {
           if(Yii::app()->request->isAjaxRequest && isset($_GET['q']))
           {

              $name = $_GET['q']; 

               $qtxt ="SELECT name FROM address WHERE name LIKE '%".$name."%'";
               $command =Yii::app()->db->createCommand($qtxt);

               $userArray =$command->queryColumn();

              $returnVal = '';
              foreach($userArray as $userAccount)
              {
                 $returnVal .= $userAccount->getAttribute('first_name').'|'
                                             .$userAccount->getAttribute('user_id')."\n";
              }
              echo $returnVal;
           }
        }

そして、このようなビューコードで..

<?php $this->widget('CAutoComplete',
          array(
                         //name of the html field that will be generated
             'name'=>'name', 
                       //replace controller/action with real ids
             'url'=>array('address/AutoCompleteLookup'), 
             'max'=>10, //specifies the max number of items to display

                         //specifies the number of chars that must be entered 
                         //before autocomplete initiates a lookup

             ));
    ?>

その仕事はうまくいく...

于 2012-05-25T18:50:30.697 に答える
0

ああ、jui のオートコンプリートは、次の形式のデータを想定しています。

期待されるデータ形式

ローカル データ、URL、またはコールバックからのデータには、次の 2 つのバリアントがあります。

文字列の配列: [ "Choice1", "Choice2" ]
label プロパティと value プロパティを持つオブジェクトの配列: [ { label: "Choice1", value: "value1" }, ... ]

したがって、アクションでは Json を返す必要があります:

echo CJSON::encode(array("Look up action"));

編集: CJSON ドキュメント

于 2012-05-25T17:46:03.207 に答える
0

Jqueryの問題は、jquery-min.jsファイルを無効にするか削除してから、正常に動作することを確認してください。

于 2014-02-28T05:47:57.317 に答える