Akses indeks $ parent di knockout.js


87

Di knockout.js 2.1.0, dalam templat yang menggunakan foreach binding, Anda dapat mengakses indeks item saat ini melalui fungsi $ index (). Dalam pengikatan foreach bersarang, apakah ada cara untuk mengakses indeks $ parent dari template?

Katakanlah saya memiliki struktur data seperti ini:

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
    },
    ...
    ]};

Dengan ini, saya ingin mencetak jalur ke setiap model, menggunakan indeks: [topModel-index subModel-index], sehingga hasilnya akan seperti ini:

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

Saya telah mengikat model menggunakan foreach, tetapi saya tidak tahu cara mengakses indeks topModel dalam konteks subModel. Contoh berikut menunjukkan pendekatan yang telah saya coba, tetapi tidak berhasil, karena saya tidak tahu cara mengakses indeks $ parent referrer.

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

Harus mencetak: 0 1, 0 2, 1 0, 1 1, 1 2, 2 0, 2 1, ...


Anda tidak benar-benar membutuhkannya ()setelah $indexitu.
Matthew Schinckel

Juga, jika Anda bisa membuat jsfiddle dengan apa yang Anda miliki, itu akan membuatnya lebih mudah. Atau posting sumber data Anda dan lihat kode model.
Matthew Schinckel

Untuk saat ini, saya hanya mengerjakan prototipe, jadi saya tidak memiliki lebih dari contoh yang diberikan. Saya terbuka untuk saran menggunakan pendekatan lain.
Jørgen

Mungkin menggambarkan apa yang Anda coba lakukan, daripada bagaimana . Mungkin ada pendekatan yang berbeda.
Matthew Schinckel

Terima kasih. Saya mengubah pertanyaan saya, dan semoga lebih jelas sekarang?
Jørgen

Jawaban:


186

untuk mengakses indeks penggunaan objek induk

$parentContext.$index()

daripada

$parent.index()

14
Padahal, untuk menjadi terlalu eksplisit atas nama orang bebal, Anda masih harus $parentContext.$index()berurusan dengan orang tua. ; ^) Sedikit lagi tentang $ parentContext di sini , fwiw.
ruffin

@ruffin bukan untuk $ index, sesuai dengan komentar Matthew pada pertanyaan awal "Anda sebenarnya tidak membutuhkan itu () setelah $ index di sana." $ index adalah variabel khusus daripada yang dapat diamati.
Brett Smith

3
terima kasih - pasti perlu diperhatikan, dalam konteks nilai komposit Anda perlu menambahkan () namun jika Anda mengikat elemen ke $ parentContext. $ index sesuai pertanyaan Anda tidak membutuhkannya.
Brett Smith

5
Butuh tanda kurung$parentContext.$index()
Jaider

4
Hanya ingin menambahkan yang $parentContext.$parentContext.$index()berfungsi seperti yang Anda harapkan juga.
Ryan Wheale

3

Cara termudah untuk mengetahuinya adalah mengunduh "konteks knockout" untuk chrome. Ini menunjukkan kepada Anda data apa yang terikat ke elemen apa dan juga memungkinkan Anda melihat fungsi / variabel yang tersedia untuk elemen terikat tertentu. Ini adalah alat yang luar biasa untuk situasi seperti ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.