我现在已经多次遇到这种模式,但还没有找到一种优雅的方式来处理它。我正在尝试设置具有只读和编辑模式的页面。
这是html:
<div>
<span data-bind="text: EventType, if: !EditMode()"></span>
<select data-bind="options: $root.EventTypes, optionsValue: 'Id',
optionsText: 'Name', value: EventType, if: EditMode()"></select>
</div>
<div>
<a href="#" data-bind="click: edit">Edit</a>
</div>
和javascript:
function viewModel(eventJSON) {
var self = this;
self.EventType = ko.observable(eventJSON.EventType);
self.EventTypes = ko.observableArray([]);
self.edit = function() {
$.getJSON("url...", function(eventTypesJSON) {
self.EventTypes(eventTypesJSON);
}
}
}
我遇到了数据绑定的时间问题。当调用 applyBindings 时,span 会被正确填充。但是,当我进入编辑模式时,下拉列表未设置为所选值,并且 EventType 设置为未定义。
这是我认为正在发生的事情:
- 用户单击 Edit 按钮并进行 ajax 调用以检索 EventType。
- 选择是数据绑定的。由于 EventTypes 数组为空,因此 EventType 设置为 null。
- ajax 调用完成并填充 EventTypes。
- 由于 EventType 先前设置为 null,因此选择了下拉列表中的第一项。(例如,原来的 EvenType 值丢失了。)
我想要它做什么:
- 用户单击 Edit 按钮并进行 ajax 调用以检索 EventType。
- ajax 调用完成并填充 EventTypes 数组。
- 选择是数据绑定的,并且选择了列表中的正确项目。