2013-10-03 156 views
0

我有一个下拉列表,下拉列表的值绑定在帐户中。我需要每次更改时都基于帐户价值的另一个下拉菜单。我可以添加订阅帐户,以便每次更改时我可以添加一个代码来填充另一个下拉菜单?订阅可观察内容

var riskRegisterViewModel = function() { 
    var self = this; 
    self.Site = ko.observable(); 
    self.Program = ko.observable(); 
    self.Department = ko.observable(); 
    self.AuditType = ko.observable(); 
    self.Auditor = ko.observable(); 
    self.Status = ko.observable(); 
    self.ScheduleClause = ko.observable(); 
    self.AuditDateFrom = ko.observable(); 
    self.AuditDateTo = ko.observable(); 
    self.RiskRegisterArray = ko.observableArray(); 

    self.AuditTypeList = ko.observableArray(GetAuditType()); // This will handle the Audit Type Of the Modal dialog   
    self.ProjectList = ko.observableArray(GetProject()); // This will handle the Account Model 

    self.RetrieveRiskRegister = function() { 
     var riskRegister = GetRiskRegister(self.Site(), self.Program(), self.Department(), self.Status(), self.AuditType(), self.Auditor(), self.AuditDateFrom(), self.AuditDateTo()); 
     self.RiskRegisterArray($.map(riskRegister, function (item) { 
      return new MapRiskRegister(item); 
     })); 
    }; 
    self.selectedRisk = ko.observable(); 
    self.selectRisk = self.selectRisk.bind(self); 
    self.itemForEditing = ko.observable(); 

}; 
ko.utils.extend(riskRegisterViewModel.prototype, { 
    // select an item and make a copy of it for editing 
    selectRisk: function (item) { 
     var self = this; 
     self.selectedRisk(item); 
     self.itemForEditing(new MapRiskRegister(ko.toJS(item)));    
    } 
}); 

var riskRegisterVM = new riskRegisterViewModel(); 
ko.applyBindings(riskRegisterVM); 
riskRegisterVM.itemForEditing.Account.subscribe(function() { 
    console.log("Hello"); 
}); 
function MapRiskRegister(item) { 
    var self = this; 
    self.SeriesNumber = ko.observable(item.SeriesNumber); 
    self.RiskRegisterEntryId = ko.observable(item.RiskRegisterEntryId); 
    self.RiskRegisterTypeId = ko.observable(item.RiskRegisterTypeId); 
    self.RiskRegisterType = ko.observable(item.RiskRegisterType); 
    self.AuditDate = ko.observable(moment(item.AuditDate).format("MMMM DD, YYYY")); 
    self.ScheduleClause = ko.observable(item.ScheduleClause); 
    self.Details = ko.observable(item.Details); 
    self.Account = ko.observable(item.Account); 
    self.AccountName = ko.observable(item.AccountName); 
    self.Department = ko.observable(item.Department); 
    self.DepartmentName = ko.observable(item.DepartmentName); 
    self.IsCompliance = ko.observable(item.IsCompliance); 
    self.ComplianceName = ko.observable(item.ComplianceName); 
    self.Findings = ko.observable(item.Findings); 
    self.Recommendation1 = ko.observable(item.Recommendation1); 
    self.Likelihood = ko.observable(item.Likelihood); 
    self.LikelihoodName = ko.observable(item.LikelihoodName); 
    self.Consequence = ko.observable(item.Consequence); 
    self.ConsequenceName = ko.observable(item.ConsequenceName); 
    self.RiskLevel = ko.observable(item.RiskLevel); 
    self.RiskLevelName = ko.observable(item.RiskLevelName); 
    self.RiskReason = ko.observable(item.RiskReason); 
    self.AuditeesReason = ko.observable(item.AuditeesReason); 
    self.POC = ko.observable(item.POC); 
    self.POCName = ko.observable(item.POCName); 
    self.TargetCompletionDate = ko.observable(item.TargetCompletionDate); 
    self.IsOpen = ko.observable(item.IsOpen); 
    self.Status = ko.observable(item.Status); 
    self.RiskLevelCurrent = ko.observable(item.RiskLevelCurrent); 
    self.StatusRemarks = ko.observable(item.StatusRemarks); 
    self.DateOfCompletion = ko.observable(item.DateOfCompletion); 
    self.Site = ko.observable(item.Site); 
    self.SiteName = ko.observable(item.SiteName); 
    self.Auditor = ko.observable(item.Auditor); 
    self.AuditorName = ko.observable(item.AuditorName); 
    self.RiskComputationAuditPeriod = ko.observable(item.RiskComputationAuditPeriod); 
    self.Filter1 = ko.observable(item.Filter1); 
    self.Filter1Name = ko.observable(item.Filter1Name); 
    self.Filter2 = ko.observable(item.Filter2); 
    self.Filter2Name = ko.observable(item.Filter2Name); 
    self.RiskComputationCurrent = ko.observable(item.RiskComputationCurrent); 
    self.RiskComputationCurrentName = ko.observable(item.RiskComputationCurrentName); 
    self.IsEfficient = ko.observable(item.IsEfficient); 
    self.IsRemediated = ko.observable(item.IsRemediated); 
    self.IsCommitted = ko.observable(item.IsCommitted); 
    self.CreatedDate = ko.observable(item.CreatedDate); 
    self.CreatedBy = ko.observable(item.CreatedBy); 
    return self; 
} 
+0

这将是最好的例子,如果你能瘦下来把你的代码的相关部分。 –

+0

这听起来像你可能会更好地把你的第二个下拉菜单绑定到一个'ko.computed',它取决于第一个下拉菜单中选定的值(应该绑定到一个可观察的值)。 –

+0

@MattBurland是的,我的第二个下拉菜单取决于第一个下拉菜单 我尝试使用此代码在帐户中进行订阅,但它不能正常工作.. riskRegisterVM.itemForEditing.Account.subscribe(function(){ console.log(“Hello” ); }); –

回答

0

试试这个

我删除了大部分的其他代码

function MapRiskRegister(item) { 
    var self = this; 

    self.Account = ko.observable(item.Account); 
    self.Account.subscribe(function(newValue){ 
     console.log(newValue); 
    }); 
    return self; 
} 
+0

@Armand ..如果我添加self.DepartmentList = ko.observableArray();在我的viewmodel中,我如何在函数MapRiskRegister(item)中调用它。 –

+0

@RamonCruz检查其他答案它有点容易,应该为你的问题更好地工作 – Armand

1

非常笼统,链接两个下拉菜单的方式是将第二绑定到ko.computed取决于第一个选定的值。事情是这样的:

self.firstDropDownOptions = ko.observableArray(); 
self.firstDropDownSelected = ko.observable(); 
self.secondDropDownOptions = ko.computed(function() { 
    var options = []; 
    if (self.firstDropDownSelected() == whatever) { 
     // populate options with whatever you need 
    } 
    else if (self.firstDropDownSelected() == somethingelse) { 
     // population options with something else 
    } 
    return options; 
}); 

firstDropDownSelected变化,淘汰赛将自动重新评估secondDropDownOptions,因为它依赖于firstDropDownSelected和你的下拉结合将被更新。

你的HTML可能是这个样子:

<select data-bind='options: firstDropDownOptions, 
    value: firstDropDownSelected'></select> 
<select data-bind='options: secondDropDownOptions'></select> 

在你的情况,我想(没有看到您的绑定)itemForEditing将相当于firstDropDownSelected