【发布时间】:2013-05-26 09:18:13
【问题描述】:
我正在使用我认为被普遍接受的ko.bindingHandler.select2:
ko.bindingHandlers.select2 = {
init: function (element, valueAccessor) {
$(element).select2(valueAccessor());
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).select2('destroy');
});
},
update: function (element) {
$(element).trigger('change');
}
};
但是,这似乎有几个问题。在这个问题中,我想找到一个答案,了解如何在对模型进行更改时更新视图。
我创建了一个 jsFiddle 来演示该问题。我有一个简单的setTimeout() 函数,它在0.25 秒后设置模型的selectedValue,以模拟类似于模型通过Ajax 调用加载数据的行为。在示例中,使用 Select2 时下拉列表值不会更新,但对于普通下拉列表来说似乎工作得很好。
完整解决方案: 我更新后的自定义绑定现在看起来像这样...
ko.bindingHandlers.select2 = {
init: function (element) {
$(element).select2({});
ko.utils.domNodeDisposal.addDisposeCallback(element, function () {
$(element).select2('destroy');
});
},
update: function (element, valueAccessor) {
var value = valueAccessor();
var valueUnwrapped = ko.utils.unwrapObservable(value);
$(element).val(valueUnwrapped).trigger('change');
}
};
在我的 HTML 中,我现在将值传递给自定义绑定。
data-bind="select2: selectedValueS2
【问题讨论】:
标签: javascript knockout.js jquery-select2 bindinghandlers