Javascript 我能得到可观测数组I';我在里面走来走去?

Javascript 我能得到可观测数组I';我在里面走来走去?,javascript,mvvm,knockout.js,Javascript,Mvvm,Knockout.js,最好用一个例子来解释。是一个链接自淘汰赛博客的示例,介绍如何使用$parent。但是,在本例中,$parent显然与$root相同,因此我很难看到它的好处 如果上面写着$parent.lastUpdated,我想改为访问可观察数组this.products。我意识到我可以说$root.products。但是,我想概括一下,而不是为每个列表显式地编写它 实际上,我将把它与ko.contextFor结合使用 您无法(一般)访问foreach循环内部直接循环的observableArray $root

最好用一个例子来解释。是一个链接自淘汰赛博客的示例,介绍如何使用
$parent
。但是,在本例中,
$parent
显然与
$root
相同,因此我很难看到它的好处

如果上面写着
$parent.lastUpdated
,我想改为访问可观察数组
this.products
。我意识到我可以说
$root.products
。但是,我想概括一下,而不是为每个列表显式地编写它

实际上,我将把它与
ko.contextFor
结合使用

您无法(一般)访问foreach循环内部直接循环的observableArray

$root
$parent
是关于作用域的,因此它只会给出包含ObservalArray的对象

但是,您可以通过使用带绑定的
,确保范围是您的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>​
以下是一个示例:

如果您不能使用额外的
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 -->

  • &mdash; 数组长度:

感谢您提供的无法完成的信息,以及
with
解决方案。这有一个“小”问题(解决方案1在可观察阵列上使用“with”)。。“with”会导致子结构的重绘(我必须覆盖“with”的逻辑以避免这种情况,但开箱即用我相信这就是它在可观察对象发生突变时的工作方式-与if相同)导致任何未绑定元素被重置-例如,您可能需要未绑定的引导面板。我正在寻求解决这个问题-可能会设置一个父$context变量,在创建子上下文时将其克隆,因此$context['myContextualArrayId']就在那里。。
<!-- 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 -->