|
|
@@ -1789,6 +1789,12 @@
|
|
|
return _source;
|
|
|
}
|
|
|
|
|
|
+ if (valueAccessor.nonBindableSource && valueAccessor.displayProperty) {
|
|
|
+ source = ko.utils.arrayMap(valueAccessor.nonBindableSource(), function(item) {
|
|
|
+ return item[valueAccessor.displayProperty]();
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
var _options = {
|
|
|
source: source,
|
|
|
onselect: function (val) {
|
|
|
@@ -3865,6 +3871,59 @@
|
|
|
$element.text(text);
|
|
|
}
|
|
|
}
|
|
|
-};
|
|
|
+ };
|
|
|
+
|
|
|
+ ko.bindingHandlers.select2Version4 = {
|
|
|
+ init: function (el, valueAccessor, allBindingsAccessor, viewModel) {
|
|
|
+ ko.utils.domNodeDisposal.addDisposeCallback(el, function () {
|
|
|
+ $(el).select2('destroy');
|
|
|
+ });
|
|
|
+
|
|
|
+ var allBindings = allBindingsAccessor(),
|
|
|
+ select2 = ko.utils.unwrapObservable(allBindings.select2Version4);
|
|
|
+
|
|
|
+ $(el).select2(select2);
|
|
|
+ },
|
|
|
+ update: function (el, valueAccessor, allBindingsAccessor, viewModel) {
|
|
|
+ var allBindings = allBindingsAccessor();
|
|
|
+
|
|
|
+ if ("value" in allBindings) {
|
|
|
+ if ((allBindings.select2Version4.multiple || el.multiple) && allBindings.value().constructor != Array) {
|
|
|
+ $(el).val(allBindings.value().split(',')).trigger('change');
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ $(el).val(allBindings.value()).trigger('change');
|
|
|
+ }
|
|
|
+ } else if ("selectedOptions" in allBindings) {
|
|
|
+ var converted = [];
|
|
|
+ var textAccessor = function (value) {
|
|
|
+ return value;
|
|
|
+ };
|
|
|
+ if ("optionsText" in allBindings) {
|
|
|
+ textAccessor = function (value) {
|
|
|
+ var valueAccessor = function (item) {
|
|
|
+ return item;
|
|
|
+ }
|
|
|
+ if ("optionsValue" in allBindings) {
|
|
|
+ valueAccessor = function (item) {
|
|
|
+ return item[allBindings.optionsValue];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ var items = $.grep(allBindings.options(), function (e) {
|
|
|
+ return valueAccessor(e) == value
|
|
|
+ });
|
|
|
+ if (items.length == 0 || items.length > 1) {
|
|
|
+ return "UNKNOWN";
|
|
|
+ }
|
|
|
+ return items[0][allBindings.optionsText];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ $.each(allBindings.selectedOptions(), function (key, value) {
|
|
|
+ converted.push({id: value, text: textAccessor(value)});
|
|
|
+ });
|
|
|
+ $(el).select2("data", converted);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ };
|
|
|
|
|
|
}));
|