この質問で受け入れられた回答に触発されたコードを使用して、ノックアウトで複数のカスケード選択を作成しました( jsFiddle - 投稿の下部にもあるコード)。
それはうまく機能しますが、子の選択を完全に非表示にするのではなく、使用できないときに無効にしたいと思います。
これには簡単なオプションがありますか?
非表示の動作は「with」バインディングによって駆動されるようですが、これは配列のリンク方法に不可欠なようです。
var mainViewModel = null;
var mainViewModelData = {
"RequestName": "test Name",
"BusinessLines": [{
"Id": 1,
"Title": "Retail",
"Clusters": [{
"Id": 1,
"Title": "Corporate si Trezorerie"},
{
"Id": 2,
"Title": "Good Bee"},
{
"Id": 3,
"Title": "Leasing"}]},
{
"Id": 2,
"Title": "Corporate",
"Clusters": [{
"Id": 1,
"Title": "REM"},
{
"Id": 2,
"Title": "BCR Procesare"},
{
"Id": 3,
"Title": "Erste Asset Management"}]}],
"SelectedBusinessLine": null,
"SelectedCluster": null,
"RequirementHighLevelDescription": null,
"Revenues": 0,
"Savings": 0,
"PreventedLosses": 0
};
mainViewModel = ko.mapping.fromJS(mainViewModelData);
ko.applyBindings(mainViewModel);
<div>
<table>
<tr>
<td>
Business Line
</td>
<td>
<select data-bind="options: BusinessLines, optionsText: 'Title', value: SelectedBusinessLine,
optionsCaption: 'Select Business Line..'">
</select>
</td>
</tr>
<tr data-bind="with: SelectedBusinessLine">
<td>
Cluster
</td>
<td> <select data-bind="options: Clusters, optionsText: 'Title', value: $root.SelectedCluster, optionsCaption: 'Select Cluster..'">
</select>
</td>
</tr>
</table>
</div>