在基于未命名数组的映射生成的挖掘模型中访问值

时间:2013-02-23 19:56:13

标签: knockout.js knockout-mapping-plugin

我正在从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代码中获取淘汰模型中的顶部数组。

我是淘汰赛的新手,所以我可能会缺少一些基本的东西。

1 个答案:

答案 0 :(得分:3)

不要与KO作斗争。只需创建一个正确的视图模型,您可以使用customers属性来保存数据,这是KO的方法。无论如何,当你有一个放置额外逻辑/数据的地方时,一个viewmodel将会很方便。

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

然后,您可以在视图中显示data-bind="foreach: customers"

但是,如果您不想拥有视图模型并且想要绑定到数组,则无法使用“客户”这样的名称访问它,您需要使用current context来引用它:使用$data属性:

data-bind="foreach: $data"

JS

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

演示JSFiddle