ดัชนีการเข้าถึงของ $ parent ใน knockout.js


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

นอกจากนี้หากคุณสามารถสร้าง jsfiddle กับสิ่งที่คุณมีได้ก็จะทำให้ง่ายขึ้น หรือโพสต์แหล่งข้อมูลของคุณและดูรหัสโมเดล
Matthew Schinckel

สำหรับตอนนี้ฉันทำงานแค่สร้างต้นแบบเท่านั้นดังนั้นฉันจึงไม่ได้มีอะไรมากไปกว่าตัวอย่างที่ให้มา ฉันเปิดรับข้อเสนอแนะโดยใช้แนวทางอื่น ๆ
Jørgen

อาจจะอธิบายสิ่งที่คุณกำลังพยายามที่จะทำมากกว่าวิธี อาจมีแนวทางที่แตกต่างออกไป
Matthew Schinckel

ขอบคุณ. ฉันเปลี่ยนคำถามแล้วและหวังว่าตอนนี้จะชัดเจนกว่านี้นะ?
Jørgen

คำตอบ:


186

เพื่อเข้าถึงดัชนีของวัตถุแม่โดยใช้

$parentContext.$index()

ค่อนข้างมากกว่า

$parent.index()

14
แม้ว่าจะโจ่งแจ้งเกินไปในนามของความไร้สมอง แต่คุณก็ยังต้อง$parentContext.$index()ใช้ห้องอาบน้ำ ; ^) อีกเล็กน้อยเกี่ยวกับ $ parentContext ที่นี่ fwiw
ruffin

@ruffin ไม่ใช่สำหรับดัชนี $ ตามความคิดเห็นของ Matthew ในคำถามเดิม "คุณไม่ต้องการสิ่งนั้น () หลังดัชนี $ ตรงนั้น" $ index เป็นตัวแปรพิเศษแทนที่จะเป็นค่าที่สังเกตได้
Brett Smith

3
ขอบคุณ - ที่น่าสังเกตอย่างแน่นอนในบริบทของค่าคอมโพสิตคุณจะต้องเพิ่ม () อย่างไรก็ตามหากคุณผูกองค์ประกอบกับดัชนี $ parentContext $ ตามคำถามที่คุณไม่ต้องการ
Brett Smith

5
ต้องการวงเล็บ$parentContext.$index()
Jaider

4
แค่อยากจะเพิ่มว่า$parentContext.$parentContext.$index()ทำงานตามที่คุณคาดหวังเกินไป
Ryan Wheale

3

วิธีที่ง่ายที่สุดที่คุณจะพบคือดาวน์โหลด "บริบทที่น่าพิศวง" สำหรับ Chrome สิ่งนี้แสดงให้คุณเห็นว่าข้อมูลใดที่เชื่อมโยงกับองค์ประกอบใดและยังช่วยให้คุณเห็นฟังก์ชัน / ตัวแปรที่มีอยู่สำหรับองค์ประกอบที่ถูกผูกไว้นั้น เป็นเครื่องมือที่น่าทึ่งสำหรับสถานการณ์เช่นนี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.