如何将动态呈现的内容传递给绑定处理程序?

问题描述

我上面有一个选择标签一个自定义绑定处理程序(样本)。当我拥有静态选项时,我会在自定义绑定处理程序中看到所有选项标签元素),但是当我们动态呈现选项时,如何获得相同的标签

情况1:

<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所示,因为没有呈现的选项我无法应用相同的内容

解决方法

您的自定义绑定处理函数具有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,因为您的选项是动态的,并且可能在select元素初始化后到达。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...