难以在KnockoutJS中绑定数组

时间:2016-11-09 16:12:24

标签: javascript asp.net json asp.net-mvc knockout.js

我很难让我的视图绑定到Knockout中的视图模型数据。其中一些绑定在应用程序中,但不绑定嵌套数组。

为了尝试将问题重现为MVCE,我创建了this jsFiddle;然而MVCE的功能甚至比实际代码更差,因为它的当前地址部分根本不起作用。我希望这只是对jsFiddle中的某些东西不熟悉。

从ASP.NET中的WebAPI调用返回的JSON,如下所示(非MVCE文本被删除):

'{"CurrentAddress":{"ResidentFrom":2010,"Address":{"OfNoFixedAbode":false,"Line1":"A","Line2":"B","Line3":"C","Line4":"D","Line5":"E","PostCode":"3C"},"FullAddress":"A, B, C, D, E, 3C"},"HasPreviousAddresses":true,"PreviousAddresses":[{"ResidentFrom":2004,"ResidentTo":2010,"Address":{"OfNoFixedAbode":false,"Line1":"K","Line2":"L","Line3":"M","Line4":"N","Line5":"O","PostCode":"2B"},"FullAddress":"K, L, M, N, O, 2B"},{"ResidentFrom":1998,"ResidentTo":2004,"Address":{"OfNoFixedAbode":false,"Line1":"F","Line2":"G","Line3":"H","Line4":"I","Line5":"J","PostCode":"1A"},"FullAddress":"F, G, H, I, J, 1A"}]}';

因为页面可以在新场景或编辑场景中使用,所以我测试如下:

if ((serverModel !== null) || (serverModel !== undefined)) {
  SetValues(viewModel, serverModel);
}

SetValues尝试将变量放入viewModel中,但它们都是相当简单的东西。它应该真的使用某种映射库,但我想知道我会先得到它的基本版本。

可以在前面提到的jsFiddle

中看到整个代码

编辑2016-11-09 我将所有这些放在一个独立的文件中并通过F12运行。我得到的错误如下:

"Unable to process binding \"value: function (){return CurrentAddress().Address().ResidentFrom }\"\nMessage: Function expected"

1 个答案:

答案 0 :(得分:1)

所以,这里有很多东西......

首先,解析JSON后,CurrentAddress对象不会被创建为observable。所以改变下面的所有绑定 -

<label data-bind="value: CurrentAddress.Address().ResidentFrom"></label>

另外,我发现您没有定义任何名为FullAddress的属性,但您已在绑定中使用它;所以它也在抛出错误。

请参阅此fiddle(哎呀!我更新了原来的......)