2013-10-03 155 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