knout.js 中 $parent 的访问索引

Posted

技术标签:

【中文标题】knout.js 中 $parent 的访问索引【英文标题】:Access index of $parent in knockout.js 【发布时间】:2012-06-14 06:23:38 【问题描述】:

在 knockout.js 2.1.0 中,在使用 foreach 绑定的模板中,您可以通过 $index() 函数访问当前项目的索引。在嵌套的 foreach 绑定中,有没有办法从模板访问 $parent 的索引?

假设我有这样的数据结构:

var application = 
  topModel: [
    
      subModel: ['foo':'foo',  'bar':'bar'], // this has top:0 and sub:0
      subModel: ['foo2':'foo2',  'bar2':'bar2'] // this has top:0 and sub:1
    ,
    
      subModel: ['foo':'foo',  'bar':'bar'] // this is top:1 sub:0
    ,
    
      subModel: ['foo':'foo',  'bar':'bar'] // this is top:2 sub:0
      subModel: ['foo':'foo',  'bar':'bar'] // this is top:2 sub:1
    ,
    ...
    ];

有了这个,我想使用索引打印每个模型的路径: [topModel-index subModel-index],所以输出会是这样的:

[0 0]
[0 1]
[1 0]
[2 0]
[2 1]
...

我已经使用 foreach 绑定了模型,但是我不知道如何在 subModel 的上下文中访问 topModel 的索引。以下示例显示了我尝试过的一种方法,但它不起作用,因为我不知道如何访问 $parent referrer 的索引。

<!--ko foreach: topModel -->
<!--ko foreach: subModel -->
  [<span data-bind="text: $parent.index()"></span>
  <span data-bind="text: $index()"></span>]
<!--/ko-->
<!--/ko-->

应该打印出:0 1, 0 2, 1 0, 1 1, 1 2, 2 0, 2 1, ...

【问题讨论】:

$index 之后你实际上不需要那个() 另外,如果你可以用你拥有的东西创建一个 jsfiddle,那会更容易。或者发布您的数据源并查看模型代码。 目前,我只从事原型设计,所以我没有比给定示例更多的东西。不过,我愿意接受使用其他方法的建议。 也许描述你正在尝试做的what,而不是如何。可能有不同的方法。 谢谢。我改变了我的问题,希望现在更清楚了吗? 【参考方案1】:

访问父对象的索引使用

$parentContext.$index()

而不是

$parent.index()

【讨论】:

虽然,要以无脑的名义过于明确,您仍然必须使用括号$parentContext.$index()。 ;^) 更多关于 $parentContext here,fwiw。 @ruffin 不适用于 $index,根据 Matthew 对原始问题的评论“在 $index 之后你实际上不需要那个 ()”。 $index 是一个特殊的变量,而不是一个 observable。 谢谢 - 绝对值得注意的是,在复合值的上下文中,您需要添加 () 但是如果您根据问题将元素绑定到 $parentContext.$index '不需要它。 需要括号$parentContext.$index() 只是想补充一点,$parentContext.$parentContext.$index() 也可以按您的预期工作。【参考方案2】:

你能找到的最简单的方法是下载 chrome 的“knockout context”。这向您显示了哪些数据绑定到了哪些元素,还可以让您查看该特定绑定元素的可用函数/变量。对于此类情况,这是一个了不起的工具。

【讨论】:

以上是关于knout.js 中 $parent 的访问索引的主要内容,如果未能解决你的问题,请参考以下文章

「mysql」索引

「mysql」索引

「mysql」索引

从子 ng-repeat 访问父 ng-repeat 的索引

异常处理

虚拟磁盘访离线访问工具----guestfish(1of2)