Knockout.js 访问以前的索引';从淘汰foreach循环中删除项目?
我有一个聊天应用程序,列出消息-如果当前消息和以前的消息是由同一个用户发布的,我不想在当前消息上显示用户名 首先,我尝试导航出Knockout.js 访问以前的索引';从淘汰foreach循环中删除项目?,knockout.js,Knockout.js,我有一个聊天应用程序,列出消息-如果当前消息和以前的消息是由同一个用户发布的,我不想在当前消息上显示用户名 首先,我尝试导航出foreach以通过相对索引访问数组。似乎我甚至无法通过直接索引访问项目: <ul data-bind="foreach:array1"> <li data-bind="text:$parent.array1()[0]">Should be John, works</li> <li data-bind="text:
foreach
以通过相对索引访问数组。似乎我甚至无法通过直接索引访问项目:
<ul data-bind="foreach:array1">
<li data-bind="text:$parent.array1()[0]">Should be John, works</li>
<li data-bind="text:$parent.array1()[$index]">Should be the same as $data, but throws error</li>
</ul>
-
-
最后,我想做以下几点:
<ul data-bind="foreach:array1">
<li data-bind="text:$parent.array1()[$index - 1]">Happens after index 0 only</li>
</ul>
- 仅在索引0之后发生
Fiddle演示第一个问题:
如何才能做到这一点?我想这就是你想要解决的第一个问题。使用
ko.utils.arrayIndexOf($parent.array1,$data)代替$index
。更新的fiddle就在这里如果您检查了Knockout changelog,$index
是在版本2.1.0中实现的:因此在JSFIDLE中更改版本可以部分解决问题1。您将不再看到错误
现在您必须正确绑定$index
。根据文档,它是可观察的,所以要在表达式中使用它,需要返回它的值:data bind=“text:$parent.array1()[$index()]”
。剔除文本绑定文档注释1:
这给我们提供了一个工作界面:
当您将相同的解决方案(更改版本并在表达式中使用$index()
)应用于第二个问题时,您可以做您想做的事情:由于这一问题实际上没有得到解决,下面是一个有效的解决方案:
可以使用$index()-1指向上一项,然后对其执行所需的任何逻辑。引用array1[$index()-1]。属性将在第一项上引发错误,因为array1[-1]不存在,因此必须有条件地执行此操作,如中所示:
data-bind="text: (array1[$index()-1]) ? array1[$index()-1].property : ''"
完整示例:谢谢。如果可能的话,我不希望遍历每个项目的整个数组。。。如果我没有弄错的话,这个解决方案将渲染推到n^2。完美。非常感谢:)最后一把小提琴似乎不起作用。我将array 1 John Joe
视为输出,这正是您应该看到的。对于每个数组元素,将打印上一个。数组1[0-1]未定义,因此只有两个可见。检查并修改索引: