2

これが既に存在する場合は申し訳ありませんが、機能させることができませんでした..名前を表示し、IDをテーブルに保存する必要があります。これらの名前は他のモデル (テーブル) から来ています。chrome network inspector で elts を検査すると、名前と id を取得しています..しかし、値は表示されません..しかし、それらをクリックしようとすると、id でアラートが表示されます..

誰でも名前を表示するのを手伝ってくれませんか -- 助けてくれてありがとう

私の _form.php は次のようなものです:

     <div class="row">
        <?php echo $form->labelEx($typeModel,'benefit_type'); ?>
        <?php
    $this->widget('zii.widgets.jui.CJuiAutoComplete', array(
    'attribute'=>'name',
    'model'=>$typeModel,
    'sourceUrl'=>array('benefit/benefit_type_list'),
    'value'=>'Please select',
    'name'=>'name',
    'id'=>'id',
    'options'=>array(
        'minLength'=>'0',
         'select'=>"js:function(event, ui) {
     alert(ui.item.id);
                                        // $('#organisation_id').val(ui.item.id);
                                        }",
    ),
    'htmlOptions'=>array(
'id'=>'id',
    'size'=>45,
    'maxlength'=>45,
    ),
    )); ?>

    <?php echo $form->error($typeModel,'benefit_type'); ?>

名前と ID を取得するための拡張クラスは次のとおりです。

   <? class EAutoCompleteAction extends CAction
    {
        public $model;
        public $attribute;
        public $id;
        private $results = array();
        public $returnVal = '';
        public function run()
        {
            if(isset($this->model) && isset($this->attribute)) {
                $criteria = new CDbCriteria();
                $criteria->compare($this->attribute, $_GET['term'], true);
                $model = new $this->model;
                foreach($model->findAll($criteria) as $m)
                {
                   // $this->results[] = $m->{$this->attribute};
                    //$this->results[] = $m-<{$this->id};
                    $this->results[] = array(
                        'name' => $m->{$this->attribute},
                            'id'=> $m->id
                    );



                    /* $this->returnVal .= $m->getAttribute('name').'|'
                    .$m->getAttribute('id'). "\n"; */
                }

            }

            echo CJSON::encode($this->results);
        }
    }
    ?>

そして私のコントローラーで:

public function actions()
    {
        return array(
                'benefit_type_list'=>array(
                        'class'=>'application.extensions.EAutoCompleteAction',
                        'model'=>'BenefitType', //My model's class name
                        'attribute'=>'name', //The attribute of the model i will search
                ),
        );

    }
4

1 に答える 1

1

この拡張機能を使用してからしばらく経ちましたが、Jquery のオートコンプリートを使用しており、EAutoCompleteAction のデータセットにはおそらく次のものが必要です。

                $this->results[] = array(
                    'label' => $m->{$this->attribute},
                    'value'=> $m->id,
                    'id'=> $m->id
                );

出典: yii フォーラム

于 2013-01-10T18:21:02.667 に答える