gpt4 book ai didi

javascript - KnockoutJS - 将选择选项绑定(bind)到对象

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:25:59 25 4
gpt4 key购买 nike

类似于this post ...

这是我的属性 View 模型:

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));
};

第一个用所有可能的属性类型填充可观察数组,第二个获取相关属性类型并将其绑定(bind)到 selectedPropertyType。

一切都按预期进行,直到我尝试引入一个下拉列表并使用 selectedPropertyType 的名称预先填充它,如下所示:

<select data-bind="options: propertyTypeList, optionsText: 'Name', value: selectedPropertyType"></select>

这使我的可观察对象 (selectedPropertyType) 将其值更改为列表中的第一个可用选项。我的理解是,虽然此列表已呈现,但 propertyTypeList 尚未填充并导致 selectedPropertyType 默认为第一个可用值,但为什么 Knockout 在调用 connection.client.populatePropertyDetails 时不更新对象?

如果我引入一个仅包含 Id 的新对象,我可以将选择列表绑定(bind)到 Id,但是我希望将它绑定(bind)到整个 selectedPropertyType 对象。可能吗?

最佳答案

您在 populatePropertyDetails 回调中创建了一个新对象。

即使 this.Idthis.Name 的属性值与 propertyTypeList 中的相应对象相同,它不是同一个对象

尝试将回调更改为:

connection.client.populatePropertyDetails = function (property) {
var type = property.PropertyType,
list = self.propertyTypeList();

var foundType = ko.utils.arrayFirst(list, function(item) {
return item.Id() == type.Id && item.Name() == type.Name;
});
if(foundType) {
self.selectedPropertyType(foundType);
}
};

关于javascript - KnockoutJS - 将选择选项绑定(bind)到对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16604956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com