Bạn không thể truy cập (chung) tới ObservableArray đang được lặp qua trực tiếp bên trong vòng lặp foreach.
$root
và $parent
là về phạm vi, do đó, nó sẽ chỉ cung cấp cho bạn đối tượng chứa ObservableArray.
Tuy nhiên, bạn có thể tận dụng điều này bằng cách đảm bảo rằng phạm vi là ObservableArray của bạn bằng cách sử dụng liên kết with
.
Nếu bạn chỉ cần các mảng cơ bản, sau đó bạn có thể làm:
<div data-bind="with: products">
<ul data-bind="foreach: $data">
<li>
<strong data-bind="text: name"></strong>
—
Array length: <em data-bind="text: $parent.length"></em>
</li>
</ul>
</div>
Nếu bạn thực sự cần observableArray, sau đó bạn cần phải chắc chắn rằng nó chưa được tháo (trong ví dụ trên $data
là chưa được tháo). Để làm điều này, bạn có thể chuẩn hóa tên của mảng và tìm kiếm nó trong mẫu của bạn như:
<div data-bind="with: { theArray: products }">
<ul data-bind="foreach: theArray">
<li>
<strong data-bind="text: name"></strong>
—
Array length: <em data-bind="text: $parent.theArray().length"></em>
</li>
</ul>
</div>
Đây là một mẫu: http://jsfiddle.net/rniemeyer/T6JvV/
Nếu bạn không thể sống chung với thêm các div
, sau đó bạn chắc chắn có thể sử dụng các ràng buộc dòng chảy kiểm soát không chứa container như:
<!-- ko with: { theArray: products } -->
<ul data-bind="foreach: theArray">
<li>
<strong data-bind="text: name"></strong>
—
Array length: <em data-bind="text: $parent.theArray().length"></em>
</li>
</ul>
<!-- /ko -->
Nguồn
2012-03-10 14:03:02
Cảm ơn, cả thông tin không thể thực hiện được và cho công việc 'có'. –
Có một vấn đề "nhỏ" với điều này (giải pháp 1 sử dụng "với" trên mảng quan sát được) .. "với" gây ra vẽ lại cấu trúc con (tôi đã ghi đè lên logic của "với" để tránh điều này nhưng ra khỏi hộp Tôi tin rằng đây là cách nó hoạt động khi đột biến của các quan sát - cùng với nếu) dẫn đến bất kỳ yếu tố không bị ràng buộc để được thiết lập lại - bạn có thể cần tấm bootstrap ví dụ mà không bị ràng buộc. Tôi đang trên nhiệm vụ tìm ra điều này - có thể thiết lập một biến mẹ bối cảnh $ mà được nhân bản khi bối cảnh con được tạo ra vì vậy bối cảnh $ ['myContextualArrayId'] là có .. –