Skip to content

Instantly share code, notes, and snippets.

@guiyuanju
Created August 17, 2017 19:14
Show Gist options
  • Select an option

  • Save guiyuanju/b4840b7980864ff7bda44e8867ffeed8 to your computer and use it in GitHub Desktop.

Select an option

Save guiyuanju/b4840b7980864ff7bda44e8867ffeed8 to your computer and use it in GitHub Desktop.
select2-preload-extension

useage

option

preload:

  • true: the dropdown list will be loaded immediately and won't change based on your input. (the option ajax of select2 needed.)
  • false: this option won't change anything.
  • function: the returned value of function will be loaded if your input length is less than minimumInputLength. (the option ajax& minimumInputLength of select2 needed.)

note

this extension refers to govorov/select2_extended_ajax_adapter.js;

$.fn.select2.amd.define('select2/data/extended-ajax',['./ajax','../utils','jquery'], function(AjaxAdapter, Utils, $){
function ExtendedAjaxAdapter ($element,options) {
this.minimumInputLength = options.get('minimumInputLength');
this.preload = options.get('preload') || false;
ExtendedAjaxAdapter.__super__.constructor.call(this,$element,options);
}
Utils.Extend(ExtendedAjaxAdapter,AjaxAdapter);
//override original query function to support default results
var originQuery = AjaxAdapter.prototype.query;
ExtendedAjaxAdapter.prototype.query = function (params, callback) {
var preload = this.preload;
if (preload === true) {
if (!params.term || params.term.length === 0) {
originQuery.call(this, params, callback);
} else {
//
}
} else if (typeof preload === 'function') {
var preloadedData = preload.call(this);
if (preloadedData && preloadedData.length && (!params.term || params.term.length < this.minimumInputLength)) {
var processedResults = this.processResults(preload,params.term);
callback(processedResults);
} else {
//
}
} else {
originQuery.call(this, params, callback);
}
};
return ExtendedAjaxAdapter;
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment