2

如果这已经存在,但我无法让它工作,我深表歉意。我需要显示名称并将 ID 存储在我的表中。这些名称来自其他模型(表)。当我在 chrome 网络检查器中检查 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 回答