当使用select和knockouts'选项'绑定时,我看到隐藏select元素并再次显示时的行为。Knockout选项选择在隐藏/显示后重新初始化
当我在列表中选择一个选项时,observable被赋予正确的值。但是,当我隐藏选择的html项目并再次使其可见时,之前选择的值将会丢失。
对于我的测试我使用下面的HTML模板:
Visible: <input type="checkbox" data-bind="checked: visible" />
<!-- ko 'if': visible -->
<select data-bind="options: options, optionsText: 'name', value: selectedItem"></select>
<!-- /ko -->
结合
var ViewModel = function() {
this.visible = ko.observable(true);
this.options = ko.observableArray([
{name: 'A', value: 'A00'},
{name: 'B', value: 'A01'},
{name: 'C', value: 'A02'},
]);
this.selectedItem = ko.computed({
read: function() {
console.log("reading value");
},
write: function (newSelection) {
console.log("setting value:" + newSelection.value);
}
});
};
ko.applyBindings(new ViewModel());
你可以在我的例子上的jsfiddle测试: http://jsfiddle.net/5wZQ2/169/
当您选择一个值(例如列表中的B),可观察值将获取该值。当您取消选中可见并隐藏选择框并再次使其可见时,它将丢失其所选值并重新初始化为列表中的第一项。
有人可以解释这种行为吗?
是否有一个特定的原因,你需要一个可写的计算Observable属性?另外,在计算的observable里面的'read'函数中,你没有返回任何值,所以什么都不会设置。 – Agalo