0

我在 YII2 框架中以乘法模式使用 Select2 小部件。"kartik-v/yii2-widget-select2": "@dev" - 这是我通过 composer 下载的。

kartik-v/yii2-widget-select2 dev-master dd09e46

我在小部件初始化('initSelection')上添加了带有 ajax 的初始值。并添加了另一种 ajax 方法来建议用户输入的新值。当用户从列表中选择一个时,它会替换在 init 中添加的初始值。新值替换初始值,但不要另一个新值。我希望将新值添加到初始值而不是替换它。

<?= $form->field($model, 'security[]')->widget(Select2::class, [

                    'attribute'     => 'security',
                    'hideSearch'    => true,
                    'data'=>$security_data,
                    'options'       => [
                        'placeholder' => 'Security',
                        'multiple'    => true,
                    ],
                    'pluginOptions' => [
                        'allowClear'         => true,
                        'minimumInputLength' => 1,
                        'ajax'               => [
                            'url'      => Url::toRoute([ '/admin/security/select-items' ]),
                            'dataType' => 'json',
                            'data'     => new JsExpression('function(params) { return {q:params.term}; }'),
                            'results' => new JsExpression('function(data,page) { return {results:data.results}; }'),
                        ],
                        'initSelection'      => new JsExpression('function(element, callback) { var id = '.Yii::$app->request->getQueryParams()['id'].';if(id !== "") {$.ajax("' . \yii\helpers\Url::toRoute([ '/admin/security/init-items' ]) . '", {data: {id: id},dataType: "json"}).done(function(data) {callback(data.results);});}}'),
                    ],
                ]); ?>

这是我的api方法:

 public function actionSelectItems($q = null){

    Yii::$app->response->format = Response::FORMAT_JSON;

    $out = ['results' => []];
   if(!empty($q)){
       $items = Security::find()->where(['like', 'title', $q])->all();
       foreach ($items as $item){
           $out['results'][] = ['id'=>$item->id, 'text'=>$item->title];

       }
   } 

    return $out;
}

public function actionInitItems($id = null){

    Yii::$app->response->format = Response::FORMAT_JSON;

    $adv = Adv::findOne($id);
    $security = @json_decode($adv->security, true);
    $out = ['results' => []];
    foreach ($security as $item){
        $text = Security::findOne($item)->title;
        $out['results'][] = ['id'=>$item, 'text'=>$text];
    }
    return $out;
}

处理http结果时是否有某种设置或我错过了什么?

4

0 回答 0