3

我正在从 Web api 检索 Json 数据。数据格式为:

[{"CustomerID":1,"CustomerName":"John"},{"CustomerID":2,"CustomerName":"Sally"}]

真实数据自然更复杂,但它的格式为没有“名称”的项目数组,例如{“customers”:[...]}。我无法更改正在传递的数据,所以这就是我必须忍受的。

我想使用映射插件在此数据上创建一个剔除模型并将其绑定到视图:

var vmCustomers = ko.mapping.fromJS(jsonObject);
ko.applyBindings(vmPartners);

我现在的问题是我不知道如何访问 HTML 页面上的数据。如果我检查 vmCustomers 并深入了解 _latestValue,我可以看到数据已加载到模型中。

我希望能够在 HTML 中做的是对应的事情

foreach: customers

我可以通过手动构建淘汰模型并使用 .mapping 来填充它(甚至手动填充它)来使其工作,但我想避免这种情况。我正在寻找的是一种从 HTML 代码中获取淘汰模型中顶部数组的方法。

我对淘汰赛很陌生,所以我可能缺少一些基本的东西。

4

1 回答 1

3

不要与KO对抗。只需创建一个适当的视图模型,其中您有一个customers属性来保存您的数据,这是 KO 的做法。无论如何,将来当您有地方放置其他逻辑/数据时,视图模型将很方便。

var viewModel = { customers: ko.mapping.fromJS(jsonObject); }
ko.applyBindings(viewModel);

然后你就可以拥有你data-bind="foreach: customers" 的看法。

但是,如果您不想拥有视图模型并且想要绑定到数组,则无法使用“客户”之类的名称访问它,您需要使用当前上下文引用它:使用$data属性:

data-bind="foreach: $data"

JS

var vmCustomers = ko.mapping.fromJS(jsonObject);
ko.applyBindings(vmCustomers);

演示JSFiddle

于 2013-02-23T20:24:26.987 回答