我有一个对象,我试图用foreach循环,但我失败了(这是6个月没有编码对我做的...)
这很好用:
<div data-bind="text: $root[36].partition"></div>
但是foreach不适合我。
<div data-bind="foreach: $root">
<div data-bind="text: $data.partition"></div>
</div>
我在HTML中的所有内容都是:
<div data-bind="foreach: $root"></div>
我的viewModel从php脚本获取JSON数据,其结构如下: 09,10和36是分区ID。每个分区都有一个“分区”变量,它显示分区的名称。实际的JSON结构更深入,这只是用于表示
top level
09
partition
vip
10
partition
vip
36
partition
vip
这是我的JS。没什么特别的,我只是在玩耍
$(document).ready(function() {
var viewModel = {};
$.getJSON('/lbstat/read.php', function(data) {
viewModel = ko.mapping.fromJS(data);
ko.applyBindings(viewModel);
});
});
JSON:
{"23":{
"partition":"Prod New SVCs Partition",
"env_dc":"Prod",
"hosts":["server01.domain.com", "server02.domain.com"],
"vips":{
"124":{
"dc_endpoint":"ADX - Prod - Intranet",
"gw_port":"9007",
"vip_name":"adx-prd.domain.net"
},
"210":{
"dc_endpoint":"Msg - Prod - Internet",
"gw_port":"8013",
"vip_name":"messaging-prd.domain.com"
},
"211":{
"dc_endpoint":"Msg - Prod - Intranet",
"gw_port":"9013",
"vip_name":"messaging-prd.domain.net"}
},
}
}
此处提供完整的JSON:http://pastebin.com/zpNngr53
我在这里做错了什么?
答案 0 :(得分:4)
你不能foreach
一个物体。你只能foreach
一个数组。您发布的JSON是一个带有一堆编号属性的对象,这就是$root[36]
工作的原因,因为36
是对象上属性的名称,而不是数组的索引。
如果你的对象是一个数组,你的代码就可以工作。