2013-10-15 4 views
1

Итак, у меня есть поиск wtform, одно поле которого представлено select2. Он загружается в зависимости от другого поля выбора через ajax. Шаг загрузки работает нормально. Но когда я отправил свою форму и получил ее обратно с данными результата, я не могу установить выбранное значение обратно в поле select2, потому что у меня есть только id, и, как я понял, метод обратного вызова initSelection требует как идентификатора, так и текста. Или, может быть, я делаю что-то неправильно.Select2 установить выбранное значение только по id

Здесь поле выбора

$("#source").select2({ 
    placeholder: "Выберите источник", 
    initSelection: function(element, callback){ 
     callback({id: element.val(), text:element.val()}) 
    }, 
    query: function(query){ 
     query.callback(source_data) 
    } 
}) 

И я хочу что-то вроде ниже. Данные с таким идентификатором уже присутствуют в select2, единственный вопрос - как его выбрать.

callback({id: element.val()) 
+0

'element.val()' все еще должен быть в области видимости функции обратного вызова, так что вы просто должны быть в состоянии передать его как параметр, не так ли? – Archer

+0

И удаление()? callback ({id: element.val) – opalenzuela

+0

element.val() дает мне id, и если я использую его только в методе обратного вызова, я получаю текст «неопределенный» в качестве выбранного значения. – free2use

ответ

1

Это, как я был в состоянии решить эту проблему:

//sample preloaded select data 
var preload_data = [{id: '1', text:'<span id="user1">John</span>'},{id: '2', text:'<span id="user2">Tim</span>'}, {id: '3', text:'<span id="user3">George</span>'}] 

//the initSelection method 
initSelection : function (element, callback) { 
    var data = []; 

    var lookup = {}; 
    for (var i = 0, len = preload_data.length; i < len; i++) { 
     lookup[preload_data[i].id] = preload_data[i]; 
    } 
    $(element.val().split(",")).each(function() { 
     data.push({id: this, text: lookup[this].text}); 
    }); 
    callback(data); 
} 
Смежные вопросы