我有一个设置,我在其中使用基于observableArray的选项填充选择 . 此数组包含的对象具有的属性多于id和name . 我希望能够使用完整的javascript对象作为选定的值 .
数据是这样的:
this.optionData = ko.observableArray([
{id: 1, name: "One", param: true},
{id: 2, name: "Two", param: true},
{id: 3, name: "Three", param: true},
]);
并且在淘汰赛中使用标准绑定非常简单
<select data-bind="
options: optionData,
optionsText: 'name',
optionsCaption: 'Please select',
value: selectedOption">
</select>
但是,我想为我的选择设置样式,并为它们添加更多功能 . 我使用select2 . 我已经提出了以下自定义绑定,这适用于带有optionsText和optionsValue的简单绑定 - 但它不适用于没有optionsValue的选项绑定(即使用对象作为值时) .
ko.bindingHandlers.select2 = {
init: function (el, valueAccessor, allBindingsAccessor, viewModel) {
ko.utils.domNodeDisposal.addDisposeCallback(el, function () {
$(el).select2('destroy');
});
var allBindings = allBindingsAccessor(),
select2 = ko.utils.unwrapObservable(valueAccessor());
$(el).select2(select2);
},
update: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var selectedOptions = ko.unwrap(allBindingsAccessor.get("selectedOptions")),
val = ko.unwrap(allBindingsAccessor.get("value")),
options = ko.unwrap(allBindingsAccessor.get("options"));
if ($(element).prop('multiple')) {
$(element).select2('val', selectedOptions, true);
}
else {
$(element).select2("val", val);
}
$(element).trigger('change');
}
};
我的问题是,我需要更新什么才能使我的自定义绑定作为默认的敲除选项绑定?
我做了这个小提琴来证明这个问题:http://jsfiddle.net/SuneRadich/LdF45/1/
2 回答
我的示例可能有助于使用optionsAfterRender来获取对象 .
workding fiddle
如有必要,我可以将其更改为单选 .
您可以使用
optionAfterRender
属性为select
添加更多功能 .考虑这个例子
SQL小提琴演示
确保您有3.1.0版