knockout.js:将{data:xyz}传递给foreach而不仅仅是xyz

时间:2012-05-21 18:13:54

标签: javascript knockout.js knockout-2.0

我刚刚开始使用knockout.js。我有这样的foreach绑定,工作正常:

<ul data-bind="foreach: people">
   <li> .... </li>
</ul>

people是我传给ko.applyBindings的模型的一部分。根据文档,以下内容也应该有效:

<ul data-bind="foreach: {data: people}"> 

但事实并非如此。该列表仍为空,但我在浏览器的错误窗口中没有看到任何错误。什么提示我可能做错了什么?我看不到这两个电话之间是否存在细微差别?

我的想法是将afterAdd的处理程序传递给foreach。因此,我需要第二种方式来调用它。

2 个答案:

答案 0 :(得分:0)

我相信你实际上在寻找模板绑定。 Foreach是它的快捷方式,但如果你需要afterAdd,你可以使用完整的绑定:

<ul data-bind='template: { foreach: people,
                        afterAdd: myPostProcessingLogic }'> </ul>

答案 1 :(得分:0)

仅供记录:解决方案有点奇怪,问题的根源是我的代码中的另一个错误。 people已通过ko.observableArray进行初始化。当我从服务器获得新数据时,我使用了这样的模型:

model.people(ko.observableArray(newData));

现在我知道这是正确的方法:

model.people(newData);

无论出于何种原因,第一个版本仍适用于某些模板绑定规范,但并非适用于所有模板绑定规范。第二个在每种情况下都能正常工作。