Javascript 使用敲除可观测数组填充dropdownlist
我正在尝试将两个下拉列表绑定到剔除可观察数组。条件是必须首先填充第一个下拉列表。第二个下拉列表依赖于第一个下拉列表。因此,我订阅第一个下拉列表以填充第二个下拉列表。 为了尝试实现这一点,我编写了以下代码 HTML是Javascript 使用敲除可观测数组填充dropdownlist,javascript,json,knockout-2.0,knockout-mvc,Javascript,Json,Knockout 2.0,Knockout Mvc,我正在尝试将两个下拉列表绑定到剔除可观察数组。条件是必须首先填充第一个下拉列表。第二个下拉列表依赖于第一个下拉列表。因此,我订阅第一个下拉列表以填充第二个下拉列表。 为了尝试实现这一点,我编写了以下代码 HTML是 <div class="form-group"> <label class="col-sm-2 control-label labelfont">Certification:</label>
<div class="form-group">
<label class="col-sm-2 control-label labelfont">Certification:</label>
<div class="col-sm-6">
<select class="form-control" id="certification" name="certification" data-bind="value: certification, options: certificationArray, optionsText: 'Certification', optionsValue: 'CertificationID', optionsCaption: 'Select a Certification'">
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label labelfont">Specialization:</label>
<div class="col-sm-6">
<select class="form-control" id="specialization" name="specialization" data-bind="value: specialization, options: specializationArray,optionsText:'Specialization',optionsValue:'SpecializationId', optionsCaption: 'Select a Specialization'">
</select>
</div>
</div>
获取相应认证和规范的函数如下
var getCertifications = function () {
$.getJSON("/Provider/GetCertifications", function (data) {
return data;
});
});
};
var getSpecializations = function () {
$.getJSON("/Provider/GetSpecializations/", { certificationID: $("#certification").val() }, function (data) {
self.specializationArray(data)
})
}
JSON响应如下所示
JSON看起来像这样
有人能告诉我正确的方向吗?我对knockout和JSON完全不熟悉。我在这里束手无策。因此,任何帮助都将不胜感激。提前感谢。在knockout中,数组的值与下拉菜单中的选项是分开的。您不会更改observableArray,而是更改observableArray本身的值。不过,最好使用
ko.computed
字段来保存第二个下拉列表的值
但我真的不明白为什么你认为你的下拉列表必须按一定的顺序排列。从你的问题来看,我不太清楚认证和专业之间的关系。在self.certification.subscribe()
中,您实际上没有做任何事情,就像在填充专门化时存在任何依赖关系一样。您在证书中提供的JSON也没有任何相关的外键。但如果用于认证的JSON如下所示:
[{"CertificationID": 1, "Certification": "M.B.B.S.", "SpecializationID": "7"},{"CertificationID": 2, "Certification": "M.D.", "SpecializationID": "3"}, ...]
虽然专门化的JSON看起来像这样
[{"SpecializationID": 1, "Specialization": "Cardiology"},
{"SpecializationID": 2, "Specialization": "Dentistry"},
{"SpecializationID": 3, "Specialization": "General Practioner"}, ...
{"SpecializationID": 7, "Specialization": "Surgery"}
]
我相信这样做应该会奏效:
self.specialization = ko.computed(function() {
return ko.utils.arrayFirst(getCertifications(), function(certs) {
return certs.ID == self.SpecializationID();
}).SpecializationID;
});
但是,既然我看不出您在哪里有任何依赖关系,那么为什么不直接填写它们呢:
self.certificationArray = ko.observableArray(getCertifications());
self.specializationArray = ko.observableArray(getSpecializations());
self.certification = ko.observable(vm.certification);
self.specialization = ko.observable(vm.specialization);
您可以使用从数据集返回的viewmodel设置这些值,它应该是数据库表中的ID字段(CertificationID、SpecializationID)
self.certificationArray = ko.observableArray(getCertifications());
self.specializationArray = ko.observableArray(getSpecializations());
self.certification = ko.observable(vm.certification);
self.specialization = ko.observable(vm.specialization);