【发布时间】:2015-02-14 05:01:31
【问题描述】:
所以我有一个 select2 标签输入工作正常,正确显示标签,并将选定的 id 存储到 selectedProducts observableArray 中。但是,我的 HTTPPost 需要一个对象数组,而不是整数数组。 我一直在寻找如何让 select2 保存为一个对象(即 {id: 1, text: "abc"}),而不仅仅是一个整数数组。
我的绑定如下:
<div class="col-sm-10">
<input type="hidden" id="tags" class="select2 form-control" multiple="multiple" data-bind="value: selectedProducts, select2: {tags: ko.toJS($parent.availableProducts), placeholder: 'select products'}" />
<pre data-bind="text: ko.toJSON(products, null, 2)"></pre>
</div>
var newItem = function (newitem) {
var self = this;
self.id = ko.observable();
self.selectedProducts = ko.observableArray();
self.products = ko.computed(function () {
return self.selectedProducts().split(',');
}, self);
}
var viewModel = function (data) {
var self = this;
self.newitem= ko.observable(new newItem());
self.availableProducts = ko.observableArray([]);
$.ajax({
type: "GET",
url: '/GetAllProducts',
dataType: 'json',
contentType: "application/json; charset=utf-8",
async: false,
success: function (data) {
ko.mapping.fromJS(data, {}, self.availableProducts);
},
error: function (err) {
alert(err.status + " : " + err.statusText);
}
});
}
ko.bindingHandlers.select2 = {
init: function (element, valueAccessor, allBindingsAccessor) {
var obj = valueAccessor(),
allBindings = allBindingsAccessor(),
lookupKey = allBindings.lookupKey;
setTimeout(function () {
$(element).select2(obj);
}, 0);
if (lookupKey) {
var value = ko.utils.unwrapObservable(allBindings.value);
$(element).select2('data', ko.utils.arrayFirst(obj.data.results, function (item) {
return item[lookupKey] === value;
}));
}
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).select2('destroy');
});
},
update: function (element) {
$(element).trigger('change');
}
}
【问题讨论】:
标签: javascript asp.net-mvc-4 knockout.js jquery-select2