淘汰赛 - 列表作为值的字典

时间:2013-09-29 16:41:57

标签: knockout.js

我在C#Web Api控制器中有数据,结构如下:

Dictionary<string, List<Project>> projects ....

字典中的键只是月份名称 - 项目按月分组。

我的淘汰ViewModel:

function ProjectsViewModel(data) {
        var self = this;
        self.projects = ko.observableArray([]);

        for (field in data) {
            if (data.hasOwnProperty(field)) {
                self.projects.push(new DictionaryItem(field, data[field]));
            }
        }
    }

    function DictionaryItem(key, value) {
        this.key = ko.observable(key);
        this.value = ko.observableArray(value);
    }

    var viewModel;

    $(function() {
        var baseUri = '@ViewBag.ApiUrl';

        $.getJSON(baseUri, function(data) {
            viewModel = new ProjectsViewModel(data);
            ko.applyBindings(viewModel);
        });
    });

我想使用以下格式的一个表格来敲除这些数据:

[key]
[project row]
[project row]
[key]
[project row]
[project row]
...

我尝试使用Knockout进行以下标记:

<table>
   <tbody data-bind="foreach: projects">
   <tr>
      <td data-bind="text: key"></td>
   </tr>
   <!-- ko:foreach: value -->
   <tr>
      <td data-bind="text: Name"></td>
   </tr>
   <!-- /ko -->
   </tbody>
</table>

但它不起作用 - 只产生&#34;关键&#34;行。我怎样才能实现我的目标? 也许我这样做基本上是错误的,我应该在我的View中将数据分组而不是做这个服务器端?

1 个答案:

答案 0 :(得分:1)

修复第二个foreach的语法。

<!-- "ko foreach: value -->

工作示例:http://jsfiddle.net/DRhrQ/