Javascript 订阅KnockoutJS中现有DOM元素的绑定

Javascript 订阅KnockoutJS中现有DOM元素的绑定,javascript,knockout.js,data-binding,Javascript,Knockout.js,Data Binding,我需要订阅DOM元素的现有绑定。例如,我有以下输入元素: <div id="MyDiv"> <input id="MyInput" data-bind="enable: isEnabled()" /> </div> 有办法做到这一点吗 更新:我扩展了示例,以便您看到我的用例:这里的div是由预处理器自动生成的,当输入被禁用时,需要在其上禁用类。如果该属性仅在输入元素上更改,则它不起作用。添加/删除必须是透明的…检查提供的答案 简而言之,您可以使用 v

我需要订阅DOM元素的现有绑定。例如,我有以下输入元素:

<div id="MyDiv">
    <input id="MyInput" data-bind="enable: isEnabled()" />
</div>
有办法做到这一点吗


更新:我扩展了示例,以便您看到我的用例:这里的
div
是由预处理器自动生成的,当输入被禁用时,需要在其上禁用
类。如果该属性仅在输入元素上更改,则它不起作用。添加/删除必须是透明的…

检查提供的答案

简而言之,您可以使用

var viewModel = ko.dataFor(domElement);

获取绑定到该DOM元素的viewmodel。然后,您可以订阅附加到该viewmodel的任何观察对象。

简短回答:不要这样做。getBindings在Knockout toolkit中不是一个特别可见的函数,这是有原因的

详细回答:您可以通过一点间接的方式获得原始绑定

HTML:

编辑:找到了一个较短的方法


同样,如果有任何方法可以说服预处理器添加CSS可观察对象,那么就这样做。以这种方式处理绑定依赖于Knockout 3.3.0内部实现的特殊特性,这种特性在将来的版本中可能会发生变化

您是否尝试过
ko.utils.getBindings(inputElement.get(0))?在您传入jQuery对象而不是元素的那一刻?编辑:啊,我想你的意思是
getBindings
本身不存在…?我不需要元素的视图模型,但确切的绑定,例如“enable”,在本例中,我需要知道“disabled”属性何时更改…嗯,明白你的意思了…也许还有另一种方法,例如定制绑定-您想解决什么问题?
var viewModel = ko.dataFor(domElement);
<div id="MyDiv">
    <input id="MyInput" data-bind="enable: isEnabled" />
</div>

<input type="checkbox" data-bind="checked: isEnabled" />
var viewModel = function() {
    self.isEnabled = ko.observable(true);           
}

ko.applyBindings(new viewModel());

var input = $('#MyInput')[0];

function getBinding(element, name) {
    var bindings = ko.bindingProvider.instance.getBindings(input, ko.contextFor(input));

    return bindings.hasOwnProperty(name) ? bindings[name] : null;
}

var binding = getBinding(input, 'enable');

binding.subscribe(function(value) {
    if (value == false)
        $("#MyDiv").addClass("disabled");
    else
        $("#MyDiv").removeClass("disabled");
});