1
0
mirror of synced 2024-11-25 22:36:03 +03:00

Make initSelection works asynchronously

This commit is contained in:
Alan Ho 2012-06-08 12:22:06 +08:00
parent 4ba25b8095
commit af1c398076

View File

@ -509,12 +509,14 @@
} else if ("tags" in opts) { } else if ("tags" in opts) {
opts.query = tags(opts.tags); opts.query = tags(opts.tags);
opts.createSearchChoice = function (term) { return {id: term, text: term}; }; opts.createSearchChoice = function (term) { return {id: term, text: term}; };
opts.initSelection = function (element) { opts.initSelection = function (element, callback) {
var data = []; var data = [];
$(splitVal(element.val(), ",")).each(function () { $(splitVal(element.val(), ",")).each(function () {
data.push({id: this, text: this}); data.push({id: this, text: this});
}); });
return data;
if ($.isFunction(callback))
callback(data);
}; };
} }
} }
@ -958,15 +960,18 @@
var selected; var selected;
if (this.opts.element.val() === "") { if (this.opts.element.val() === "") {
this.updateSelection({id: "", text: ""}); this.updateSelection({id: "", text: ""});
this.close();
this.setPlaceholder();
} else { } else {
selected = this.opts.initSelection.call(null, this.opts.element); var self = this;
if (selected !== undefined && selected !== null) { this.opts.initSelection.call(null, this.opts.element, function(selected){
this.updateSelection(selected); if (selected !== undefined && selected !== null) {
} self.updateSelection(selected);
self.close();
self.setPlaceholder();
}
});
} }
this.close();
this.setPlaceholder();
}, },
prepareOpts: function () { prepareOpts: function () {
@ -974,10 +979,11 @@
if (opts.element.get(0).tagName.toLowerCase() === "select") { if (opts.element.get(0).tagName.toLowerCase() === "select") {
// install sthe selection initializer // install sthe selection initializer
opts.initSelection = function (element) { opts.initSelection = function (element, callback) {
var selected = element.find(":selected"); var selected = element.find(":selected");
// a single select box always has a value, no need to null check 'selected' // a single select box always has a value, no need to null check 'selected'
return {id: selected.attr("value"), text: selected.text()}; if ($.isFunction(callback))
callback({id: selected.attr("value"), text: selected.text()});
}; };
} }
@ -1116,12 +1122,14 @@
if (opts.element.get(0).tagName.toLowerCase() === "select") { if (opts.element.get(0).tagName.toLowerCase() === "select") {
// install sthe selection initializer // install sthe selection initializer
opts.initSelection = function (element) { opts.initSelection = function (element,callback) {
var data = []; var data = [];
element.find(":selected").each(function () { element.find(":selected").each(function () {
data.push({id: $(this).attr("value"), text: $(this).text()}); data.push({id: $(this).attr("value"), text: $(this).text()});
}); });
return data;
if ($.isFunction(callback))
callback(data);
}; };
} }
@ -1228,18 +1236,21 @@
var data; var data;
if (this.opts.element.val() === "") { if (this.opts.element.val() === "") {
this.updateSelection([]); this.updateSelection([]);
this.close();
// set the placeholder if necessary
this.clearSearch();
} }
if (this.select || this.opts.element.val() !== "") { if (this.select || this.opts.element.val() !== "") {
data = this.opts.initSelection.call(null, this.opts.element); var self = this;
if (data !== undefined && data !== null) { this.opts.initSelection.call(null, this.opts.element, function(data){
this.updateSelection(data); if (data !== undefined && data !== null) {
} self.updateSelection(data);
} self.close();
// set the placeholder if necessary
this.close(); self.clearSearch();
}
// set the placeholder if necessary });
this.clearSearch(); }
}, },
clearSearch: function () { clearSearch: function () {