Я пытаюсь сделать простой каскадный список со списком, используя нокаут. Мой первый список со списком привязывается к 2 свойствам в модели представления:
BusinessLines в качестве источника для вариантов со списком
SelectedBusinessLine в качестве выбранного элемента в первом поле со списком.
Каждая бизнес-линия имеет набор кластеров.
Второе поле со списком должно привязывать данные к SelectedBusinessLine.Clusters, наблюдаемому для источника параметров поля со списком, и SelectedCluster для выбранного параметра.
Проблема в том, что второе поле со списком вообще не заполняется.
Источник в JsFiddle (в JsFiddle первая привязка тоже не работает, извините, впервые)
JavaScript
var mainViewModel = null;
$(document).ready(function() {
var mainViewModelData = <%= JsonConvert.SerializeObject(NewRequestViewModel) %>;
mainViewModel = ko.mapping.fromJS(mainViewModelData);
ko.applyBindings(mainViewModel);
});
HTML
<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>
<td>
Cluster
</td>
<td>
<select data-bind="options: SelectedBusinessLine.Clusters,
optionsText: 'Title',
value: SelectedCluster,
optionsCaption: 'Select Cluster..'">
</select>
</td>
</tr>
</table>
</div>
Обновление:
Второе решение (без вычисляемых реквизитов)
<select data-bind="options: SelectedBusinessLine() ? SelectedBusinessLine().Clusters() : [],
optionsText: 'Title',
value: SelectedCluster,
optionsCaption: 'Select Cluster..'">
</select>