【问题标题】:How to pass dynamically rendered content to binding handler?如何将动态呈现的内容传递给绑定处理程序?
【发布时间】:2021-01-18 08:52:48
【问题描述】:

我有一个选择标签和一个自定义绑定处理程序(sample)。当我有静态选项时,我在自定义绑定处理程序中看到所有选项标签(element),但是当我们动态呈现选项时,我怎样才能获得相同的选项

案例一:

<select data-bind="sample:{}">
    <option value="">Select gear...</option>
    <option value="pitons">Pitons</option>
    <option value="cams">Cams</option>
</select>

案例2:

<select data-bind="sample:{},foreach:options">
    <option data-bind="text:optValue"></option>
</select>

代码:

ko.bindingHandlers.sample = {
    init: function (element) {
     case 1: element has all 3 options
     case 2: element has **nothing** as <option> is rendered dynamically
 }
}

实际上,我正在尝试将 selectize 添加到元素中,如案例 2 中没有呈现的选项,我无法应用相同的选项。

【问题讨论】:

    标签: javascript jquery knockout.js selectize.js


    【解决方案1】:

    您的自定义绑定处理函数需要 5 个参数:

    ko.bindingHandlers.sample = {
        update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {
            var options = allBindings.get('options');
            console.log(options);
        }
    };
    

    您可以使用第三个参数来访问使用其get 方法绑定到元素的所有模型值。因此,这意味着您可以这样做:allBindings.get('options'),这应该可以让您访问动态选择选项。

    您可能希望为绑定处理程序使用update 回调而不是init,因为您的选项是动态的,并且可能在选择元素初始化后到达。

    【讨论】:

      猜你喜欢
      • 2020-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多