我在我的 html 中定义了 kendocombox,如下所示
<input id="selFrameworkVersion" style="width: 210px" data-bind="kendoComboBox: { dataTextField: 'Name', dataValueField: 'Id', data: $root.versionListByProductType, value: $root.editFrameworkVersion, optionsCaption: 'Select Version...' }" />
组合框正确加载并设置值,但是当它没有将焦点设置到列表中的正确项目时。见下图
您可以看到值为 5.5.1,但它设置为 5.4,这是列表中的第一项。我现在知道它为什么会发生。在我的组合框中,您可以看到我将值设置为 $root.editFrameworkVersion。在我的视图模型中,我对该值使用订阅事件。请参阅下面的代码
self.editFrameworkVersion.subscribe(function (value) {
var combobox = $("#selFrameworkVersion").data("kendoComboBox");
var callback = function (data) {
self.editOnlyAlternativeVersions(self.versionListByProductType());
combobox.select(function (dataItem) {
return dataItem.Name === value;
});
self.editOnlyAlternativeVersions.remove(function (data) {
return parseInt($("#selFrameworkVersion").attr('value')) === parseInt(data.Id());
});
};
loadVersionListByProductType(self.editProductType().Id(), callback);
});
我使用这个订阅事件来做一些逻辑。在这种情况下,我正在调用 WCF 服务,该服务再次在该组合框中加载值,这就是为什么它总是设置为第一个值。但它需要我调用该服务以获得一些逻辑。然后我在您已经在上面看到的那个订阅事件中添加了代码
combobox.select(function (dataItem) {
return dataItem.Name === value;
});
此代码正确设置值,但前提是组合框失去焦点。我应该怎么办?