如何从敲除绑定中获取DOM元素?

时间:2013-02-25 16:03:39

标签: knockout.js

我使用knockout将DOM元素绑定到viewModel。 当我更改底层模型上的属性时,它会更改DOM - 一切正常。

但是,是否有办法获取绑定的DOM元素,以便在底层模型从外部更新时可以为其添加一个类?

我使用了自定义绑定,这让我可以访问DOM元素,但我想知道是否有更简单的方法直接来自viewModel的绑定属性?

由于

示例代码(TypeScript)

SetMyCell(row: number, newValue: any) {

    var ditem = this._DataItems[row];

    // update the actual value    
    ditem.Producer(newValue);

    // Now I wish to decorate the DOM item this Producer property is 
    // bound to with a class. How to go about that?

}

1 个答案:

答案 0 :(得分:11)

例如,您可以滥用可见绑定来执行传递$ element和$ data的函数。

<span data-bind="visible: func1($element, $data)">Test span</span>

查看此fiddle

我知道你上面提到你不想使用自定义绑定,但我仍然想指出这个选项。虽然我正在使用自定义绑定,但是当外部更改发生时,修改元素的逻辑仍将在viewmodel中发生。

ko.bindingHandlers.widget = {
    init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {
        var elemObservable = valueAccessor();
        if (ko.isObservable(elemObservable)) {
            elemObservable(element);
        }
    }
};

var vm = function () {
    var self = this;
    .....
    self.spanElement = ko.observable();
    self.btnClick = function (){
        var elem = self.spanElement();
        $(elem).html("This is the span element");
    };
    ......
};

并且html将是

<button data-bind="click: btnClick">change element text or something else</button>
<span data-bind="widget: spanElement"></span>

我更新了fiddle,以便您可以看到它的实际效果