【问题标题】:Explicity set value binding handler inside a custom binding handler with knockout.js带有knockout.js的自定义绑定处理程序中的显式设置值绑定处理程序
【发布时间】:2021-03-29 13:59:32
【问题描述】:

我试图让可观察的 FirstName 像元素上的默认 value 绑定一样。出于某种原因,下面的ko.bindingHandlers.value.init 不起作用。当我更新文本框时,它不会反映在属性中,但是如果我在元素上手动设置 value 绑定,它可以正常工作。

HTML

<td class="text-center text-nowrap">
    @Html.TextBoxFor(q => q.Number, new { data_bind = "dynamicFormList: { observable: true, value: FirstName }" })
</td>

处理程序

ko.bindingHandlers.dynamicFormList = {
        init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
            var values = ko.utils.unwrapObservable(valueAccessor());
            if (values.observable && values.value) {
                ko.bindingHandlers.value.init(element, valueAccessor, allBindingsAccessor, viewModel, bindingContext);
            }
        }
}

【问题讨论】:

    标签: javascript knockout.js


    【解决方案1】:

    您不能像那样调用绑定处理程序,但有一种方法(由于某种原因未记录)称为applyBindingsToNode,您可以使用:

    ko.bindingHandlers.dynamicFormList = {
        init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {
            var values = ko.utils.unwrapObservable(valueAccessor());
            if (values.observable && values.value) {
                ko.applyBindingsToNode(
                    element,
                    { value: values.value }
                );
            }
        }
    }
    

    小提琴:https://jsfiddle.net/thebluenile/12agb3x9/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多