Chỉ mục truy cập của $ parent trong knockout.js


87

Trong knockout.js 2.1.0, trong một mẫu sử dụng liên kết foreach, bạn có thể truy cập chỉ mục của mục hiện tại thông qua hàm $ index (). Trong một ràng buộc foreach lồng nhau, có cách nào để truy cập chỉ mục của $ cha từ một mẫu không?

Giả sử tôi có cấu trúc dữ liệu như sau:

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

Với điều này, tôi muốn in đường dẫn đến từng mô hình, sử dụng các chỉ số: [topModel-index subModel-index], để đầu ra sẽ giống như sau:

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

Tôi đã ràng buộc các mô hình bằng foreach, nhưng tôi không thể tìm ra cách truy cập chỉ mục của topModel trong ngữ cảnh của subModel. Ví dụ sau đây cho thấy một cách tiếp cận mà tôi đã thử nhưng không hiệu quả, vì tôi không thể tìm ra cách truy cập chỉ mục của liên kết giới thiệu $ cha.

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

Nên in ra: 0 1, 0 2, 1 0, 1 1, 1 2, 2 0, 2 1, ...


Bạn không thực sự cần điều đó ()sau $indexđó.
Matthew Schinckel

Ngoài ra, nếu bạn có thể tạo jsfiddle với những gì bạn có, điều đó sẽ dễ dàng hơn. Hoặc đăng nguồn dữ liệu của bạn và xem mã mô hình.
Matthew Schinckel 11/12/12

Hiện tại, tôi chỉ đang làm việc về tạo mẫu, vì vậy tôi không có nhiều thứ hơn ví dụ đã cho. Tuy nhiên, tôi sẵn sàng đón nhận các đề xuất bằng các cách tiếp cận khác.
Jørgen

Có thể mô tả những gì bạn đang cố gắng làm, thay vì làm thế nào . Có thể có một cách tiếp cận khác.
Matthew Schinckel

Cảm ơn. Tôi đã thay đổi câu hỏi của mình và hy vọng nó rõ ràng hơn bây giờ?
Jørgen

Câu trả lời:


185

để truy cập chỉ mục của đối tượng mẹ sử dụng

$parentContext.$index()

hơn là

$parent.index()

Cảm ơn. Chỉ cần dành nhiều thời gian để cố gắng tìm ra điều đó!
DavidHyogo

14
Mặc dù, để nói rõ ràng quá mức dưới danh nghĩa của sự thiểu não, bạn vẫn phải làm thế $parentContext.$index()với những người có vẻ ngoài. ; ^) Thêm một chút về $ parentContext ở đây , fwiw.
ruffin

3
cảm ơn - chắc chắn đáng chú ý, trong ngữ cảnh của một giá trị tổng hợp, bạn sẽ cần thêm () tuy nhiên nếu bạn đang ràng buộc một phần tử với chỉ mục $ parentContext. $ theo câu hỏi bạn không cần nó.
Brett Smith

5
Ngoặc Cần$parentContext.$index()
Jaider

4
Chỉ muốn thêm rằng nó $parentContext.$parentContext.$index()hoạt động như bạn mong đợi.
Ryan Wheale

3

Cách dễ nhất bạn có thể tìm hiểu là tải xuống "ngữ cảnh loại trực tiếp" cho chrome. Điều này cho bạn biết dữ liệu nào được liên kết với phần tử nào và cũng cho phép bạn xem các hàm / biến có sẵn cho phần tử bị ràng buộc cụ thể đó. Đó là một công cụ tuyệt vời cho những tình huống như thế này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.