嗨,我有这个 ajax 调用:
$.ajax({
type: "POST",
url: "wsCart.asmx/GetShippingRates2",
contentType: "application/json; charset=utf-8",
cache: false,
data: datastring,
dataType: "json",
success: function (d) {
alert(JSON.stringify(d));
vm.shippingOptions = ko.mapping.fromJS(d);
}
});
这是 JSON
{"d":"[
{\"Name\":\"Fedex - Error\",\"InternalName\":\"11\",\"Picture\":null,\"Costs\":0.0,\"Delivery\":\"2013-06-21T13:48:43.8220537+02:00\",\"ExtraInfo\":null},
{\"Name\":\"Normal shipment\",\"InternalName\":\"normal\",\"Picture\":\"/images/blank.gif\",\"Costs\":2.5,\"Delivery\":\"0001-01-01T00:00:00\",\"ExtraInfo\":null},
{\"Name\":\"UPS - Expedited\",\"InternalName\":\"08\",\"Picture\":\"/images/ups-logo.png\",\"Costs\":122.0,\"Delivery\":\"2013-06-21T13:48:37.4170513+02:00\",\"ExtraInfo\":\"\"},
{\"Name\":\"UPS - Saver\",\"InternalName\":\"65\",\"Picture\":\"/images/ups-logo.png\",\"Costs\":122.46,\"Delivery\":\"2013-06-08T00:00:00\",\"ExtraInfo\":\"\"}]"}
这是我的GetShippingRates2
方法:
var shipOptions = new List<ShipmentRateOption>();
shipOptions.Add(staticShip);
List<ShipmentRateOption> a = shipOptions.OrderBy(p => p.Costs).ToList();
return JsonConvert.SerializeObject(a);
我的淘汰赛(viewmodel)有:
var shipOptions = [];
function ovm() {
var self = this;
self.shippingOptions = ko.observableArray(shipOptions);
}
var vm = new ovm();
ko.applyBindings(vm);
ajax 调用由 jquery on click 事件触发。我必须将数组绑定到的 HTML:
<table style="width: 60%;">
<tr data-bind="template: { foreach: shippingOptions() }">
<td><label><input name="shipmentoptions" type="radio" data-bind="value: Name" /><span data-bind="text: Name"></span></label></td>
<td style="text-align: right;">€</td>
<td style="text-align: center;">pic</td>
</tr>
</table>
我发现了几个关于这个主题的 SO 问题,但不知何故,其中大多数都是 MVC。这个接近了,但不知何故并没有帮助我。我将上面提到的 JSON 作为警报,并且在调试它时遇到了麻烦,并且感觉d:
json 中的 json 导致绑定出现问题。但我找不到解决方案。有人可以指出我正确的方向吗?
提前致谢!!
编辑
更改为ko.mapping.fromJS(d.d, {}, vm.shippingOptions);
,<table style="width: 60%;" data-bind="foreach: shippingOptions">
但现在我得到: