knockout.js提供了一种将值绑定到bindingHandler中新创建的元素的方法

knockout.js is there a way to set value binding to newly created element in bindingHandler

本文关键字:bindingHandler 方法 新创建 创建 绑定 元素 js knockout 一种      更新时间:2023-09-26

我正在创建bindingHandler,它假设在元素内部创建labelinput元素,并将新创建的输入值附加到viewModel中已经设置的observable。

但这比我想象的要棘手,我不知道如何传递observable,因为我尝试的任何东西要么抛出错误,要么将observable函数绑定为字符串,这不是我想要的。

所以我想知道如何才能达到这个结果?

目前我正在传递类似的值

data-bind="input: {placeholder: 'Username', value: username, class: 'input'}"

我知道我可以通过创建一个模板来获得类似的结果,但我想知道是否有这样的方法?这会给我更多的灵活性。

Knockout公开了一个函数ko.applyBindingsToNode,它可以满足您的需要。创建input元素后,您应该设置如下绑定:

ko.applyBindingsToNode(input, function() {
    return {
        value: valueAccessor().value
    };
});

由于Knockout的3.0版本,您也可以使用此方法:

ko.applyBindingAccessorsToNode(input, {
    value: function() {
        return valueAccessor().value;
    }
});