淘汰赛自定义绑定封装容器“方案”结合
问题描述:
我试图做一个简单的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);
}
};
任何帮助,在此将不胜感激。
答
看起来像你的问题只是涉及到的jsfiddle加载脚本的方式。你必须将其设置为onLoad
,这是导致你applyBindings到您的自定义绑定的创建之前调用。
如果更改使用像No wrap in <body>
它会工作,除了一个小问题小提琴:
的options
结合不具有init
在2.2及以下版本绑定。它将在2.3及更高版本中具有init
函数。如果你不需要在你的init
功能(严格包装吧)做其他事情,那么你可以做:
init: ko.bindingHandlers.options.init,
update: function (element, valueAccessor, allBindingsAccessor) {
ko.bindingHandlers.options.update(element, valueAccessor, allBindingsAccessor);
}
它要么是不确定的,或者使用的是有(2.3+为)。
非常感谢。 – 2013-05-06 15:30:49
我只是想知道如何找出绑定是否有init/update函数以及参数是什么。当我看着在GitHub上的选项结合(https://github.com/SteveSanderson/knockout/blob/master/src/binding/defaultBindings/options.js)它似乎有检查,以确保该元素的初始化函数是一个选择输入,然后删除了那里的任何选项。 – 2013-05-06 15:43:31
@BinyominTrager - 在这种情况下有点令人困惑。我们更新了未发布的代码中的'option'绑定(将在2.3版本中)。这是非常罕见的事情(在核心绑定中添加/删除init/update方法)。如果您想要支持旧版本/新版本的KO,您必须在调用它之前检查它是否存在。我会更新答案来演示。 – 2013-05-06 15:50:00