我刚开始使用 knockoutjs,并且正在尝试构建动态树视图。为了简化,我删除了与问题无关的所有内容。树视图将由嵌套的 UL 标记组成。
的HTML:
<div id="pnlDestinations">
<ul data-bind="template: { name: 'GroupTemplate', foreach: Groups }"></ul>
</div>
<script type="text/html" id="GroupTemplate">
<li>
<a href="#" data-bind="text: GroupName, click: function() { RetrieveDestinations($data); }"></a>
<ul data-bind="template: { name: 'DestinationTemplate', foreach: Destinations }"></ul>
</li>
</script>
<script type="text/html" id="DestinationTemplate">
<li>
<a href="#" data-bind="text: DestinationName"></a>
</li>
</script>
编码:
function ViewModel(groups) {
Groups = ko.mapping.fromJS(groups);
RetrieveDestinations = function (group) {
$.getJSON('GetDestinations?id=' + group.GroupId(), function (data) {
group.Destinations(ko.mapping.fromJS(data));
});
}
}
$(function () {
$.getJSON("GetGroups", function (data) {
ko.applyBindings(new ViewModel(data));
});
});
所以我在两个级别绑定树视图(使用2个模板),但我只在“GetGroups”中检索一个级别(目的地存在,但是是一个空数组)。
单击组时,将在 RetrieveDestinations() 方法中检索目标,并且应该替换组中的空数组。但是,它们没有出现在我的树形视图中。
树视图的绑定应该是正确的,因为如果我在“GetGroups”中包含目的地,一切都会正确呈现。