2015-04-07 2 views
1

Я использую структуру Yii в проекте, и я использую расширение, которое использует select2 jquery. Я не могу понять, как реализация для ajax работает с этим расширением или select2.Select2 ajax option using YII Framework

Мой вызов ajax возвращает следующий json.

[ 
    {"id":"1", "text" : "Option one"}, 
    {"id":"1", "text" : "Option one"}, 
    {"id":"1", "text" : "Option one"} 
    ] 

Расширение юй обхватывает расширение ВЫБ.2 ниже

$this->widget('ext.select2.ESelect2', array(
        'name' => 'selectInput', 
        'ajax' => array(
         'url'=>Yii::app()->createUrl('controller/ajaxAction'), 
         'dataType' => 'json', 
         'type' => 'GET', 
         'results' => 'js:function(data,page) { 
    var more = (page * 10) < data.total; return {results: data, more:more }; 
          }', 
         'formatResult' => 'js:function(data){ 
           return data.name; 
           }', 
         'formatSelection' => 'js: function(data) { 
           return data.name; 
           }', 
        ), 
       )); 

Я нашел соответствующий вопрос от этого Question! Ссылка на расширение, используемое нами, - YII select2 Extention!

ответ

1

Итак, через неделю я слился с ответом на этот вопрос.

Сначала позвольте мне выделить, как select2 ajax или в моем случае Yii ESelect Extension.

Параметры jQuery для ajax такие же, как и для Eselect Extention, например, url, type и datatype, хотя есть небольшая разница в формате, возвращаемом после успешного запроса.

Что касается набора результатов для Eselect/select2, ожидается возвращение двух параметров. что

id : data.myOptionsValue; 
text : data.myOptionText; 

Ссылка :: https://select2.github.io/options.html#ajax

, если мы хотим настроить формат для результирующего набора, который retured мы можем пойти голову и расширить плагин с помощью

'formatResult' => 'js:function(data){ 
            return data.name; 
            }', 
          'formatSelection' => 'js: function(data) { 
            return data.name; 
            }', 

I также возникла проблема, связанная с тем, как расширялось расширение. Посмотрите вокруг, и я понял, что у нас есть два типа данных jsonp и json, эти два типа данных будут обрабатывать данные по-разному.

Jsonp (json padding) позволяет отправлять параметры запроса при запросе. Что касается моего случая, я не передаю никаких других параметров, например, authkey e.t.c. В моем случае я изменил тип данных на json и вернул json с идентификатором и текстом в качестве результатов. См. Ниже мой рабочий фрагмент.

echo CHtml::textField('myElementName', '', array('class' => 'form-control col-lg-12')); 
$this->widget('ext.select2.ESelect2', array(
       'selector' => '#myElementName', 
       'options' => array(
        'placeholder' => 'Search ..', 
        'ajax' => array(
         'url' => Yii::app()->createUrl('controller/ajaxAction'), 
         'dataType' => 'json', 
         'delay' => 250, 
         'data' => 'js: function(term) { 
        return { 
         q: term, 
        }; 
       }', 
         'results' => 'js: function(data){ 


       return {results: data } 
      }', 
        ), 
       ), 
      ));