我正在创建一个knockout js自定义绑定,这将允许我使用bootstrap multiselect的数据绑定。我需要它来处理单个<select>
并且还要多选<select multiple="true">
。我在这个jsfiddle
我已经得到它,以便单个和多个选项都可以显示下拉选项,并且随着按钮添加新类别,它们会显示在多选下拉列表中。我还想更新viewmodels selectedItems,其中_selectedCategory
为单<select>
和'_selectedCategories'为多选。
我在jsfiddle中添加了一些按钮来测试bootstrap multiselect元素。
从下拉列表中选择DOM元素后,如何更新viewmodels _selectedCategories
和_selectedCategory
?
代码位于jsfiddle
答案 0 :(得分:3)
我不确定我是否可以帮助你实现目标,但有些指示:
$(this).multiselect({
位于init
。multiselect
绑定的绑定变量。 (我不知道_categoryID
的用途是什么。)这将导致update
触发。这将是valueAccessor()
返回的内容。optionsText
和optionsValue
应该有简单的字符串参数,但value
的参数应该是一个不带引号的可观察名称。这是您提出的问题中的一个关键问题。ko.bindingHandlers
条目)处理程序,您不需要单独绑定,并且只有当您需要绑定才能成为您正在执行的操作的一部分时。您可能需要打包options
,optionsText
和optionsValue
,而不是将它们包含在data-bind
中。但是其中一个。 更新我updated your fiddle处理多选案例。我没有发现selectedOptions
绑定处理程序对我有效,所以我不得不把它放在init
中。这打破了单选案例;需要特殊情况。
$(element).change(function (e) {
var selectedOptions = ko.utils.arrayFilter(Array.from(e.target.options), function (opt) {
return opt.selected;
});
var selectedValues = ko.utils.arrayMap(selectedOptions, function (opt) {
return opt.value;
});
valueAccessor()(selectedValues);
});