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.