Как добавить новые значения в несколько Select2 из Kartik вместо замены старых? - PullRequest
0 голосов
/ 16 октября 2019

Я использую виджет Select2 в режиме умножения в рамках YII2. "kartik-v / yii2-widget-select2": "@dev" - это я скачал через композитор.

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

Я добавил начальные значения с помощью ajax в init виджета ('initSelection'). И добавил еще один метод 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 результат?

...