Могу ли я получить наблюдаемый массив, который я предвижу внутри?
Это, вероятно, лучше объяснить на примере. Это пример из блога Knockout о том, как использовать $parent
, Однако в этом случае $parent
по-видимому, так же, как $root
, так что я не вижу выгоды.
Где это говорит $parent.lastUpdated
Я хотел бы вместо этого получить доступ к наблюдаемому массиву, this.products
, Я понимаю, что могу сказать $root.products
, Однако я хотел бы обобщить это, а не писать это явно для каждого списка.
Я на самом деле буду использовать это в сочетании с ko.contextFor
,
1 ответ
Вы не можете получить доступ (в общем) к observableArray, который зацикливается непосредственно внутри цикла foreach.
$root
а также $parent
о области видимости, так что он просто даст вам объект, который содержит observableArray.
Тем не менее, вы можете воспользоваться этим, убедившись, что область является вашим observableArray, используя with
связывание.
Если вам просто нужен базовый массив, то вы можете сделать:
<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>
Если вам действительно нужен массив observableArray, то вам нужно убедиться, что он не был развернут (в приведенном выше примере $data
уже развернут). Для этого вы можете нормализовать имя массива и искать его в своем шаблоне, например:
<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>
Вот пример: http://jsfiddle.net/rniemeyer/T6JvV/
Если вы не можете жить с дополнительным div
тогда вы можете использовать привязки потока управления без контейнеров, например:
<!-- 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 -->