我正在使用带有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>
我做错了什么?
中号
答案 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">...
感谢您的回答。
中号