Knockout.js'de $ parent erişim dizinine


87

Knockout.js 2.1.0'da, foreach bağlamayı kullanan bir şablonda, $ index () işlevi aracılığıyla geçerli öğenin dizinine erişebilirsiniz. İç içe geçmiş bir foreach bağlamasında, bir şablondan $ parent dizinine erişmenin herhangi bir yolu var mı?

Şöyle bir veri yapım olduğunu varsayalım:

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

Bununla, indisleri kullanarak her modelin yolunu yazdırmak istiyorum: [topModel-index subModel-index], böylece çıktı aşağıdaki gibi olacaktır:

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

Foreach kullanarak modelleri bağladım, ancak subModel bağlamında topModel'in indeksine nasıl erişeceğimi çözemiyorum. Aşağıdaki örnek denediğim bir yaklaşımı gösteriyor, ancak çalışmıyor çünkü $ parent referrer indeksine nasıl erişeceğimi çözemiyorum.

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

Yazdırılmalı: 0 1, 0 2, 1 0, 1 1, 1 2, 2 0, 2 1, ...


Aslında oradan ()sonra buna ihtiyacın $indexyok.
Matthew Schinckel

Ayrıca, sahip olduklarınızla bir jsfiddle oluşturabilirseniz, bu işinizi kolaylaştırır. Veya veri kaynağınızı gönderin ve model kodunu görüntüleyin.
Matthew Schinckel

Şimdilik, sadece prototipleme üzerinde çalışıyorum, bu yüzden verilen örnekten daha fazlasına sahip değilim. Yine de diğer yaklaşımları kullanan önerilere açığım.
Jørgen

Belki açıklamak Ne sen ziyade, yapmaya çalıştıkları nasıl . Farklı bir yaklaşım olabilir.
Matthew Schinckel

Teşekkürler. Sorumu değiştirdim ve umarım şimdi daha anlaşılır mı?
Jørgen

Yanıtlar:


186

üst nesnenin dizinine erişmek için şunu kullanın:

$parentContext.$index()

ziyade

$parent.index()

14
Yine de, beyinsizlik adına aşırı açık olmak için $parentContext.$index(), yine de parenlerle yapmak zorundasın . ; ^) $ ParentContext hakkında biraz daha burada , fwiw.
2013

@ruffin $ endeksi için değil, Matthew'un orijinal soruyla ilgili yorumuna göre "$ endeksinden sonra buna () gerçekten ihtiyacınız yok." $ endeksi, gözlemlenebilir olmaktan çok özel bir değişkendir.
Brett Smith

3
teşekkürler - kesinlikle kayda değer, bir bileşik değer bağlamında () eklemeniz gerekir, ancak bir öğeyi $ parentContext. $ dizinine bağlarsanız, buna ihtiyacınız olmadığı için buna ihtiyacınız yoktur.
Brett Smith

5
Parantez gerekli$parentContext.$index()
Jaider

4
Sadece $parentContext.$parentContext.$index()beklediğiniz gibi çalıştığını eklemek istedim .
Ryan Wheale

3

Öğrenmenin en kolay yolu, Chrome için "altını gizleme bağlamını" indirmektir. Bu size hangi verilerin hangi öğeye bağlı olduğunu gösterir ve ayrıca o belirli bağlı öğeye yönelik kullanılabilir işlevleri / değişkenleri görmenizi sağlar. Bu gibi durumlar için harika bir araçtır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.