问题描述
我上面有一个选择标签和一个自定义绑定处理程序(样本)。当我拥有静态选项时,我会在自定义绑定处理程序中看到所有选项标签(元素),但是当我们动态呈现选项时,如何获得相同的标签
情况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元素初始化后到达。