类似于这个帖子...
这是我的属性视图模型:
function propertyViewModel() {
var self = this;
self.propertyTypeList = ko.observableArray([]);
self.selectedPropertyType = ko.observable();
}
这是我的属性类型模型:
function propertyTypeModel(id, name) {
this.Id = ko.observable(id);
this.Name = ko.observable(name);
}
我使用 signalR 从数据库中获取数据,并在成功时调用以下客户端函数:
connection.client.populatePropertyTypeList = function (propertyTypeList) {
var mappedTypes = $.map(propertyTypeList, function (item) {
return new propertyTypeModel(item.Id, item.Name);
});
self.propertyTypeList(mappedTypes);
};
和:
connection.client.populatePropertyDetails = function (property) {
self.selectedPropertyType(new propertyTypeModel(property.PropertyType.Id, property.PropertyType.Name));
};
第一个使用所有可能的属性类型填充可观察数组,第二个获取相关属性类型并将其绑定到 selectedPropertyType。
一切都按预期工作,直到我尝试引入一个下拉列表并使用 selectedPropertyType 的名称预先填充它,如下所示:
<select data-bind="options: propertyTypeList, optionsText: 'Name', value: selectedPropertyType"></select>
这使我的可观察对象 (selectedPropertyType) 将其值更改为列表中的第一个可用选项。我的理解是,虽然这个列表被渲染,propertyTypeList 还没有填充,并且导致 selectedPropertyType 默认为第一个可用值,但是为什么 Knockout 在调用 connection.client.populatePropertyDetails 时不更新对象?
如果我引入一个仅包含 Id 的新对象,我可以将选择列表绑定到 Id,但是我希望将它绑定到整个 selectedPropertyType 对象。可能吗?