0

这是一个非常利基的场景,理想情况下我需要能够绑定一个属性,但能够知道该属性在根视图模型中的位置。

例如,假设我有对象:

{
   id: ko.observable(1),
   name: ko.observable("some user"),
   groups: [
      { id: ko.observable(1), name: ko.observable("some group") },
      { id: ko.observable(2), name: ko.observable("some group") },
   ]
}

现在的问题是,如果我有这样的绑定:

<div>
<!-- ko foreach: groups -->
    <input data-bind="value: name, custom-binding: { property: name, other: foo }" />
<!-- /ko -->
</div>

现在我需要能够在name这里解决rootModel.groups[currentIndex].name反对只是name。目前我认为没有办法在绑定中知道属性是"name"因为它只看到值,所以我可能需要将它作为字符串传递,或者在绑定看起来的对象上有一个自定义属性为了。无论哪种方式,我都需要能够以某种方式获取绑定范围内每个可观察对象(与其范围内应用的 rootModel 相关)的属性路径。

我知道这看起来很疯狂,而且确实如此,但如果可能的话,这仍然是我需要做的事情。所以 foreach 只是子绑定范围发生变化并被包装的一种场景,因此对于所有场景,我需要能够构建一个property-path用于此自定义绑定的 for 属性。

那么有没有办法做到这一点?

4

1 回答 1

0

似乎没有简单的方法可以做到这一点,所以我必须为某些绑定编写预处理器以缓存范围,然后在运行时将其作为新绑定应用(因为预处理器无法访问绑定上下文)。

然后在实际绑定中它们被代理并查找是否存在具有现有范围的任何父级,然后附加并缓存本地属性以在绑定上下文中查找子级。

这被用于:

https://github.com/grofit/treacherous

所以随意看看它是如何在那里完成的,如果有更好的解决方案,请告诉我:)

于 2016-04-04T12:22:30.143 回答