击倒.js中$ parent的访问索引


87

在基因敲除(snockout.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绑定了模型,但是我不知道如何在子模型的上下文中访问topModel的索引。下面的示例显示了我尝试过的一种方法,但是它不起作用,因为我无法弄清楚如何访问$ parent引用者的索引。

<!--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,那将使其变得更容易。或发布您的数据源并查看模型代码。
马修·辛克尔

到目前为止,我只从事原型制作,因此除了给定的示例以外,我所能做的还不多。不过,我愿意接受使用其他方法的建议。
约尔根2012年

也许说明了什么你正在尝试做的,而不是如何。可能有不同的方法。
马修·申克尔

谢谢。我更改了问题,希望现在更清楚了吗?
约尔根2012年

Answers:


185

访问父对象的索引使用

$parentContext.$index()

而不是

$parent.index()

谢谢。只是花了很长时间试图找到那个!
DavidHyogo

14
但是,为了以无脑的名义过于露骨,您仍然必须保持$parentContext.$index()冷静。; ^)关于$ parentContext的更多信息,fwiw。
鲁芬

3
谢谢-绝对值得注意的是,在复合值的上下文中,您需要添加(),但是如果您将元素绑定到$ parentContext。$ index中,则根据您不需要的问题。
Brett Smith,

5
需要括号$parentContext.$index()
Jaider

4
只是想添加它也$parentContext.$parentContext.$index()可以像您期望的那样工作。
Ryan Wheale 2014年

3

您可以找到的最简单方法是下载Chrome的“敲除上下文”。这显示了什么数据绑定到了什么元素,还使您可以看到该特定绑定元素的可用函数/变量。对于此类情况,这是一个了不起的工具。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.