3

可以说我有这个:

<div data-bind="enable: false">
    <div data-bind="someCustomBinding: myValue"></div>
</div>

我是否可以从自定义绑定中访问父容器的“启用”绑定?

== 澄清:==

在自定义绑定中,您可以使用 valueAssessor 访问当前绑定值。您还可以通过 allBindings 访问其他绑定,甚至可以通过 bindingContext 访问不同相关上下文中的值。

我只是想知道您是否可以从自定义绑定中访问父 html 元素的绑定(以类似于 valueAccessor 的方式)

像这样的东西(sudo代码):

ko.bindingHandlers.someCustomBinding=
{
    init: (element, valueAccessor, allBindings) =>
    {
        var parentIsEnabled = 
             ko.GetContextFor($(element).parent()).get('enable');
    }
}
4

2 回答 2

8

您可以访问父节点并解析其data-bind属性:

JSON.parse('{' + $(element).parent().data("bind") + '}')

请注意在绑定定义中使用双引号 ("),如下所示 jsFiddle

可悲的是,我找不到更优雅的方式来做到这一点。

dataForKO 允许您使用/访问 dom 元素的视图模型contextFor,但我没有看到任何方法来获取 dom 元素的绑定定义。

编辑: 经过进一步调查,您可以使用以下内容访问父母绑定:

ko.bindingProvider.instance.getBindings($(element).parent().get(0), bindingContext)

它将返回一个带有绑定的对象。例如,如果您声明 adata-bind="style: { backgroundColor: myBackgroundColor }"您将能够通过ko.bindingProvider.instance.getBindings($(element).parent().get(0), bindingContext).style.backgroundColor

唯一的问题是您无法在视图模型中获得可观察的名称(或者至少我不知道如何,除非您将每个属性与您的视图模型进行比较,例如比较淘汰可观察的成语

于 2014-04-17T13:13:03.593 回答
0

是的。自定义绑定和函数的bindingContext参数公开了对和的访问。 initupdate$parent$parents$root

于 2014-04-16T15:20:33.337 回答