Javascript 从父视图模型中删除下拉列表

Javascript 从父视图模型中删除下拉列表,javascript,knockout.js,promise,dropdown,Javascript,Knockout.js,Promise,Dropdown,我有一个有x个下拉列表的集合。我想用DB提供的列表填写下拉列表 HTML <div class="input-col input-col-short"> <select data-bind="options: $parent.insuranceCoverList(), optionsText: 'displayName', optionsValue: 'insuranceCoverId', value: selectedInsuranceCover"></s

我有一个有x个下拉列表的集合。我想用DB提供的列表填写下拉列表

HTML

<div class="input-col input-col-short">
    <select data-bind="options: $parent.insuranceCoverList(), optionsText: 'displayName', optionsValue: 'insuranceCoverId', value: selectedInsuranceCover"></select>
</div>

我失败的地方有什么建议吗?

Ajax是异步的。不能从异步函数返回值

这是观察到的完美情况。创建一个可观察的数组来保存列表项,并让视图依赖于该数组

这样,视图将在您将项写入该数组时自动更新,例如当Ajax请求返回时。完全按照击倒的设计,完全按照它应该做的

视图模型:

self.InsuranceTypeID = ko.observable();
self.insuranceCoverList = ko.observableArray();

// automatic loading!
self.InsuranceTypeID.subscribe(function (insuranceTypeId) {
    GetInsuranceCover(insuranceTypeId).done(function (data) {
        self.insuranceCoverList(data.map(function (v) {
            return new AvailableDropdownItems({
                dropdownItemId: v.ProgramCode,
                dropdownItemName: v.DisplayValue
            });
        }));
    });
});
视图:


通常,您不应该将
.push()
推送到循环中的可观察数组中。对数组的每次更改都会通知它的所有依赖项(订阅服务器/视图绑定),而这些依赖项又会通知它们的依赖项,依此类推


如果仍要替换数组的内容,请先创建项,然后一步将它们推入数组,就像上面数组接收
数据的结果一样。map()

Ajax是异步的。不能从异步函数返回值

这是观察到的完美情况。创建一个可观察的数组来保存列表项,并让视图依赖于该数组

这样,视图将在您将项写入该数组时自动更新,例如当Ajax请求返回时。完全按照击倒的设计,完全按照它应该做的

视图模型:

self.InsuranceTypeID = ko.observable();
self.insuranceCoverList = ko.observableArray();

// automatic loading!
self.InsuranceTypeID.subscribe(function (insuranceTypeId) {
    GetInsuranceCover(insuranceTypeId).done(function (data) {
        self.insuranceCoverList(data.map(function (v) {
            return new AvailableDropdownItems({
                dropdownItemId: v.ProgramCode,
                dropdownItemName: v.DisplayValue
            });
        }));
    });
});
视图:


通常,您不应该将
.push()
推送到循环中的可观察数组中。对数组的每次更改都会通知它的所有依赖项(订阅服务器/视图绑定),而这些依赖项又会通知它们的依赖项,依此类推


如果仍要替换数组的内容,请先创建项目,然后一步将其推入数组,如上图所示,数组将接收到
data.map()

的可能重复的可能重复感谢您的帮助,并用
data.map()给我提示。它最终起作用了我唯一需要添加的是
self.InsuranceTypeID=ko.observable()标准JS函数。关于self.InsuranceTypeID()
-我想已经是这样了。您在自己的代码中使用它就像一个可观察的对象。感谢您的帮助,并用
data.map()
给我提示。它最终起作用了我唯一需要添加的是
self.InsuranceTypeID=ko.observable()标准JS函数。关于self.InsuranceTypeID()
-我想已经是这样了。您可以像在自己的代码中可以观察到的那样使用它。
<div class="input-col input-col-short">
    <select data-bind="options: $parent.insuranceCoverList, optionsText: 'displayName', optionsValue: 'insuranceCoverId', value: selectedInsuranceCover"></select>
</div>