让我说我有这个:
<div data-bind="enable: false">
<div data-bind="someCustomBinding: myValue"></div>
</div>
我可以访问&#39;启用&#39;从自定义绑定中绑定父容器?
==澄清:==
在自定义绑定中,您可以使用valueAssessor访问当前绑定值。您还可以通过bindingContext通过allBindings甚至不同相关上下文中的值访问其他绑定。
我只是想知道你是否可以从自定义绑定中访问父html元素的绑定(与valueAccessor类似)
像这样(sudo代码):
ko.bindingHandlers.someCustomBinding=
{
init: (element, valueAccessor, allBindings) =>
{
var parentIsEnabled =
ko.GetContextFor($(element).parent()).get('enable');
}
}
答案 0 :(得分:8)
您可以访问父节点并解析其data-bind
属性:
JSON.parse('{' + $(element).parent().data("bind") + '}')
小心将双引号(&#34;)放入绑定定义中,如下所示 jsFiddle
可悲的是,我无法找到更优雅的方式来做到这一点。
KO允许您使用dataFor
/ contextFor
访问dom元素的viewmodel,但我没有看到任何方法来获取dom元素的绑定定义。
修改强> 进一步调查后,您可以通过以下方式访问父母绑定:
ko.bindingProvider.instance.getBindings($(element).parent().get(0), bindingContext)
它将返回带有绑定的对象。例如,如果您声明data-bind="style: { backgroundColor: myBackgroundColor }"
,则可以通过ko.bindingProvider.instance.getBindings($(element).parent().get(0), bindingContext).style.backgroundColor
唯一的问题是你无法在viewmodel中获得可观察的名称(或者至少我不知道如何,除非你将每个属性与你的视图模型比较idiom for comparing knockout observables)
答案 1 :(得分:0)
是。 custom bindings bindingContext
和init
函数的update
参数会显示对$parent
,$parents
和$root
的访问权限。