这是一个非常适合的场景,理想情况下,我需要能够对属性进行绑定,但能够知道该属性在根视图模型中的位置。
例如,假设我有一个对象:
{
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。
有办法吗?
发布于 2016-04-04 12:22:30
要做到这一点似乎不容易,所以我不得不为某些绑定编写预处理器,以缓存作用域,然后在运行时将其作为新绑定应用(因为预处理器不能访问绑定上下文)。
然后,在实际的绑定中,它们被代理,如果有任何具有现有作用域的父级,则会追加本地属性并缓存其用于绑定上下文中的子查找。
这一做法目前用于:
https://github.com/grofit/treacherous
所以,请随便看看它是如何做到的,如果有更好的解决方案,请告诉我:)
https://stackoverflow.com/questions/36126100
复制相似问题