1
0
mirror of synced 2024-11-22 04:56:08 +03:00

improves selectAll performance in MultiSelect2

This commit is contained in:
Ted Liang 2014-12-09 16:15:51 +11:00
parent 39394e2ee8
commit 2ee7fadfce

View File

@ -2966,21 +2966,18 @@ the specific language governing permissions and limitations under the Apache Lic
// multi
updateSelection: function (data) {
var ids = [], filtered = [], self = this;
var ids = {}, filtered = [], self = this;
// filter out duplicates
$(data).each(function () {
if (indexOf(self.id(this), ids) < 0) {
ids.push(self.id(this));
if (!(self.id(this) in ids)) {
ids[self.id(this)] = 0;
filtered.push(this);
}
});
data = filtered;
this.selection.find(".select2-search-choice").remove();
$(data).each(function () {
self.addSelectedChoice(this);
});
this.addSelectedChoice(filtered);
self.postprocessResults();
},
@ -3054,6 +3051,14 @@ the specific language governing permissions and limitations under the Apache Lic
},
addSelectedChoice: function (data) {
var val = this.getVal(), self = this;
$(data).each(function () {
val.push(self.createChoice(this));
});
this.setVal(val);
},
createChoice: function (data) {
var enableChoice = !data.locked,
enabledItem = $(
"<li class='select2-search-choice'>" +
@ -3066,7 +3071,6 @@ the specific language governing permissions and limitations under the Apache Lic
"</li>");
var choice = enableChoice ? enabledItem : disabledItem,
id = this.id(data),
val = this.getVal(),
formatted,
cssClass;
@ -3100,8 +3104,7 @@ the specific language governing permissions and limitations under the Apache Lic
choice.data("select2-data", data);
choice.insertBefore(this.searchContainer);
val.push(id);
this.setVal(val);
return id;
},
// multi
@ -3233,14 +3236,16 @@ the specific language governing permissions and limitations under the Apache Lic
// multi
setVal: function (val) {
var unique;
if (this.select) {
this.select.val(val);
} else {
unique = [];
var unique = [], valMap = {};
// filter out duplicates
$(val).each(function () {
if (indexOf(this, unique) < 0) unique.push(this);
if (!(this in valMap)) {
unique.push(this);
valMap[this] = 0;
}
});
this.opts.element.val(unique.length === 0 ? "" : unique.join(this.opts.separator));
}