淘汰赛中的顶级对象名称

时间:2014-09-09 10:10:53

标签: c# json serialization knockout.js

我正在使用带有knockout的JavaScriptSerializer.Serialize序列化我的viewmodel。麻烦的是我没有获得与foreach绑定一起使用的顶级属性名称。我该怎么做?

我的JSON看起来像这样:

widgets.apply([{"WidgetType":"ListWidget", "Items":[
    {"LinkText":"Product terms","Url":"http://bbc.co.uk"},
    {"LinkText":"Customer","Url":"http://bbc.co.uk"},    
    {"LinkText":"Reports","Url":"http://bbc.co.uk"}],"Title":"Actions"}]);
});

我的淘汰赛看起来像这样:

<ul data-bind="foreach: Items" class="widget">
    <a data-bind="attr: { title: LinkText, href: Url }"></a>
</ul>

我做错了什么?

中号

2 个答案:

答案 0 :(得分:1)

有两种选择:

1)使用$root

<!-- ko foreach: $root -->
<h3 data-bind="text: WidgetType"></h3>
<ul data-bind="foreach: Items" class="widget">
    <li><a data-bind="attr: { title: LinkText, href: Url }">Link</a></li>
</ul>
<!-- /ko -->

2)给自己一个顶级属性名称:

widgets.apply({
    TopLevelPropertyName: [
        {
            "WidgetType":"ListWidget",
            "Items": [
                {"LinkText":"Product terms","Url":"http://bbc.co.uk"},
                {"LinkText":"Customer","Url":"http://bbc.co.uk"},    
                {"LinkText":"Reports","Url":"http://bbc.co.uk"}
            ],
            "Title":"Actions"
        }
    ]
});

<!-- ko foreach: TopLevelPropertyName -->
<h3 data-bind="text: WidgetType"></h3>
<ul data-bind="foreach: Items" class="widget">
    <li><a data-bind="attr: { title: LinkText, href: Url }">Link</a></li>
</ul>

答案 1 :(得分:0)

我找到了解决问题的方法。我需要使用viewmodel的名称作为我的外观的根目录:

<ul data-bind="foreach: widget">...

感谢您的回答。

中号