具有“选项”绑定的Knockout自定义绑定包装器

时间:2013-05-06 14:55:34

标签: knockout.js ko-custom-binding

我正在尝试为“options”绑定创建一个简单的KO自定义绑定包装器,类似于this example中描述的内容。我的目标是使用自定义绑定将select2.js应用于指定的选择框。

我试图通过将options binding包装在自定义包装器中来开始,但由于某种原因它无法正常工作。

这是我的(jsFiddle):

ko.bindingHandlers.select2 = {
  init: function (element) {
      ko.bindingHandlers.options.init(element);
  },
  update: function (element, valueAccessor, allBindingsAccessor) {
      ko.bindingHandlers.options.update(element, valueAccessor, allBindingsAccessor);
  }
};

对此的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

看起来您的问题与jsFiddle加载脚本的方式有关。您已将其设置为onLoad,这导致在创建自定义绑定之前调用applyBindings。

如果你改变小提琴使用No wrap in <body>之类的东西,除了一个小问题外,它会起作用:

options绑定在版本2.2及更低版本中没有init绑定。它将在2.3及更高版本中具有init功能。如果您不需要在init函数中进行任何进一步的操作(严格包装它),那么您可以这样做:

init: ko.bindingHandlers.options.init,
update: function (element, valueAccessor, allBindingsAccessor) {
   ko.bindingHandlers.options.update(element, valueAccessor, allBindingsAccessor);
}

它将是未定义的或使用那里(对于2.3 +)。

示例:http://jsfiddle.net/rniemeyer/AerJ5/