Могу ли я получить наблюдаемый массив, который я предвижу внутри? - PullRequest
16 голосов
/ 09 марта 2012

Вероятно, это лучше объяснить на примере. Этот - это пример ссылки из блога Knockout о том, как использовать $parent.Однако в этом случае $parent, по-видимому, совпадает с $root, поэтому у меня возникают проблемы с просмотром выгоды.

Там, где написано $parent.lastUpdated, вместо этого я хотел бы получить доступ к наблюдаемоймассив, this.products.Я понимаю, что могу сказать $root.products.Тем не менее, я хотел бы обобщить это, а не писать это явно для каждого списка.

Я на самом деле буду использовать это в сочетании с ko.contextFor.

1 Ответ

27 голосов
/ 10 марта 2012

Вы не можете получить доступ (в общем) к observableArray, который зацикливается непосредственно внутри цикла foreach.

$root и $parent относятся к области видимости, поэтому она просто даст вам объект, содержащий observableArray.

Однако вы можете воспользоваться этим, убедившись, что область действия - ваш observableArray, используя привязку with.

Если вам просто нужен базовый массив, вы можете сделать:

<div data-bind="with: products">
    <ul data-bind="foreach: $data">
        <li>
            <strong data-bind="text: name"></strong>
            &mdash;
            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>
            &mdash;
            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>
            &mdash;
            Array length: <em data-bind="text: $parent.theArray().length"></em>
        </li>
    </ul>
<!-- /ko -->
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...