Knockout.js 淘汰选择-如何使用2个不同的观察值设置默认值
嗨,我有一个选择在我的看法Knockout.js 淘汰选择-如何使用2个不同的观察值设置默认值,knockout.js,Knockout.js,嗨,我有一个选择在我的看法 <div data-bind="with: selectedInsurancePolicy"> <select data-bind="options: $parent.insuranceCompanies, optionsText: 'companyName', value: $parent.selectedInsurancePolicy.co
<div data-bind="with: selectedInsurancePolicy">
<select data-bind="options: $parent.insuranceCompanies,
optionsText: 'companyName',
value: $parent.selectedInsurancePolicy.companyID">
</select>
注意
选择了带括号的保险策略()。由于它是可观察的,您需要调用它来检索其中的值。您可以减少再现实际问题所需的代码吗?您不需要整个viewmodel来演示问题!你的问题标题和正文似乎不一致。你的实际问题是什么?我曾试图减少viewmodel,但所有这些都是必要的,我也调整了标题,并用粗体添加了一些说明。这可能是一个语言问题,但在重读几遍之后,粗体问题对我来说没有多大意义。-没有帮助的是,代码并不包含实际的复制,它只是其中的一部分。尝试创建一个工作堆栈片段,它只显示您正在询问的问题。(为此添加一点代码,但当您尝试删除其他位时:我认为,演示您的问题不需要所有这些可观察内容、地址细节等。)
var insuranceViewModel = function(companies, policies){
var self = this;
var companies = companies || {};
var policies = policies || {};
self.EditableInsuranceCompany = ko.observable();
self.EditableInsurancePolicy = ko.observable();
self.selectedInsuranceCompany = ko.observable();
self.selectedInsurancePolicy = ko.observable();
self.selectInsurancePolicyCompany = ko.observable();
self.insuranceCompanies = ko.observableArray(ko.utils.arrayMap(companies, function (company) {
return new observableInsuranceCompany(company.id, company.name, company.address1, company.address2, company.city, company.postcode, company.phone, company.fax);
}));
self.insurancePolicies = ko.observableArray(ko.utils.arrayMap(policies, function (policy) {
var companyName = ko.computed(function(){
var company = ko.utils.arrayFirst(self.insuranceCompanies(), function(company) {
return company.id == policy.companyID;
})
return company;
});
console.log(companyName().companyName());
return new observableInsurancePolicy(policy.id,policy.companyID,companyName().companyName(),policy.policyNumber,policy.expiry,policy.policyDetails);
}));
addInsurancePolicy = function(){
return function(){
totalInsurancePoliciesLoaded += 1;
var company = new observableInsurancePolicy(totalInsurancePoliciesLoaded,1,"aviva","","","","","");
self.insurancePolicies.push(company);
self.selectedInsurancePolicy(company);
};
};
}
<div data-bind="with: selectedInsurancePolicy">
<select data-bind="options: $parent.insuranceCompanies,
optionsText: 'companyName',
value: $parent.selectedInsurancePolicy().companyID">
</select>