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, ...
()
setelah$index
itu.Jawaban:
untuk mengakses indeks penggunaan objek induk
daripada
sumber
$parentContext.$index()
berurusan dengan orang tua. ; ^) Sedikit lagi tentang $ parentContext di sini , fwiw.$parentContext.$index()
$parentContext.$parentContext.$index()
berfungsi seperti yang Anda harapkan juga.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.
sumber