我可以获得我在内部预测的可观察数组吗?

Mat*_*hen 16 javascript mvvm knockout.js

最好用一个例子来解释. 是一个关于如何使用的Knockout博客链接的示例$parent.但是,在这种情况下,$parent显然是相同的$root,所以我很难看到好处.

在它说的地方$parent.lastUpdated,我想改为访问可观察数组this.products.我意识到我可以说$root.products.但是,我想概括一下,而不是为每个列表明确写出来.

我实际上将与此结合使用ko.contextFor.

RP *_*yer 27

您无法访问(通常)直接在foreach循环内部循环的observableArray.

$root并且$parent是关于范围的,所以它只会给你包含observableArray的对象.

但是,您可以通过使用with绑定确保范围是您的observableArray来利用此功能.

如果您只需要底层数组,那么您可以:

<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>?
Run Code Online (Sandbox Code Playgroud)

如果你真的需要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>?
Run Code Online (Sandbox Code Playgroud)

以下是一个示例: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 -->
Run Code Online (Sandbox Code Playgroud)