knockout.js에서 $ parent의 액세스 색인


87

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를 사용하여 모델을 바인딩했지만 하위 모델의 컨텍스트에서 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.
Matthew Schinckel 2012-06-11

또한 가지고있는 것으로 jsfiddle을 만들 수 있다면 더 쉽게 만들 수 있습니다. 또는 데이터 소스를 게시하고 모델 코드를보십시오.
Matthew Schinckel 2012-06-11

지금은 프로토 타이핑 작업 만하고 있으므로 주어진 예제보다 더 많은 것을 가지고 있지 않습니다. 그래도 다른 접근 방식을 사용하는 제안에 열려 있습니다.
Jørgen

방법 보다는하려는 작업을 설명 수 있습니다 . 다른 접근 방식이있을 수 있습니다.
Matthew Schinckel 2012-06-11

감사. 내 질문을 변경했는데 이제 더 명확 해 지길 바랍니다.
Jørgen

답변:


186

부모 개체의 인덱스에 액세스하려면

$parentContext.$index()

보다는

$parent.index()

감사. 그것을 찾으려고 몇 년을 보냈습니다!
DavidHyogo 2013

14
비록 두뇌가 없다는 이름으로 지나치게 명시 적이 되려면 여전히 $parentContext.$index()괄호 를 사용해야 합니다. ; ^) 여기 $ parentContext에 대해 조금 더 , fwiw.
ruffin 2013

3
감사합니다-확실히 주목할 가치가 있습니다. 복합 값의 맥락에서 ()를 추가해야하지만 질문에 따라 $ parentContext. $ index에 요소를 바인딩하는 경우 필요하지 않습니다.
Brett Smith

5
필요 괄호$parentContext.$index()
Jaider

4
$parentContext.$parentContext.$index()예상대로 작동 하는 것을 추가하고 싶었 습니다.
Ryan Wheale 2014

3

가장 쉽게 알아낼 수있는 방법은 크롬 용 "녹아웃 컨텍스트"를 다운로드하는 것입니다. 이것은 어떤 데이터가 어떤 요소에 바인딩되어 있는지 보여주고 특정 바인딩 된 요소에 사용 가능한 함수 / 변수를 볼 수 있도록합니다. 이러한 상황을위한 놀라운 도구입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.