了解 observable 在 foreach/descendant 绑定中根模型中的位置
Knowing where observable lives in root model in foreach/descendant bindings in knockout
这是一个非常小众的场景,理想情况下我需要能够绑定 属性,但能够知道 属性 在根视图模型中的位置。
例如,假设我有对象:
{
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
。
那么有办法做到这一点吗?
似乎没有简单的方法来做到这一点,所以我不得不为某些绑定编写预处理器来缓存范围,然后在运行时将其作为新绑定应用(因为预处理器无法访问绑定上下文) .
然后在实际的绑定中,它们被代理并查找是否有任何具有现有范围的父级,然后附加本地 属性 并缓存用于绑定上下文中的子级查找。
这用于:
https://github.com/grofit/treacherous
所以请随意看看它是如何完成的,如果有更好的解决方案请告诉我:)
这是一个非常小众的场景,理想情况下我需要能够绑定 属性,但能够知道 属性 在根视图模型中的位置。
例如,假设我有对象:
{
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
。
那么有办法做到这一点吗?
似乎没有简单的方法来做到这一点,所以我不得不为某些绑定编写预处理器来缓存范围,然后在运行时将其作为新绑定应用(因为预处理器无法访问绑定上下文) .
然后在实际的绑定中,它们被代理并查找是否有任何具有现有范围的父级,然后附加本地 属性 并缓存用于绑定上下文中的子级查找。
这用于:
https://github.com/grofit/treacherous
所以请随意看看它是如何完成的,如果有更好的解决方案请告诉我:)