[jquery-select2] How can I set the initial value of Select2 when using AJAX?

If you are using a templateSelection and ajax, some of these other answers may not work. It seems that creating a new option element and setting the value and text will not satisfy the template method when your data objects use other values than id and text.

Here is what worked for me:

$("#selectElem").select2({
  ajax: { ... },
  data: [YOUR_DEFAULT_OBJECT],
  templateSelection: yourCustomTemplate
} 

Check out the jsFiddle here: https://jsfiddle.net/shanabus/f8h1xnv4

In my case, I had to processResults in since my data did not contain the required id and text fields. If you need to do this, you will also need to run your initial selection through the same function. Like so:

$(".js-select2").select2({
  ajax: {
    url: SOME_URL,
    processResults: processData
  },
  data: processData([YOUR_INIT_OBJECT]).results,
  minimumInputLength: 1,
  templateSelection: myCustomTemplate
});

function processData(data) {
  var mapdata = $.map(data, function (obj) {      
    obj.id = obj.Id;
    obj.text = '[' + obj.Code + '] ' + obj.Description;
    return obj;
  });
  return { results: mapdata }; 
}

function myCustomTemplate(item) {
     return '<strong>' + item.Code + '</strong> - ' + item.Description;
}