2013-05-06 73 views
2

我试图做一个简单的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); 
    } 
}; 

任何帮助,在此将不胜感激。

回答

2

看起来像你的问题只是涉及到的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+为)。

样品:http://jsfiddle.net/rniemeyer/AerJ5/

+0

非常感谢。 – 2013-05-06 15:30:49

+0

我只是想知道如何找出绑定是否有init/update函数以及参数是什么。当我看着在GitHub上的选项结合(https://github.com/SteveSanderson/knockout/blob/master/src/binding/defaultBindings/options.js)它似乎有检查,以确保该元素的初始化函数是一个选择输入,然后删除了那里的任何选项。 – 2013-05-06 15:43:31

+1

@BinyominTrager - 在这种情况下有点令人困惑。我们更新了未发布的代码中的'option'绑定(将在2.3版本中)。这是非常罕见的事情(在核心绑定中添加/删除init/update方法)。如果您想要支持旧版本/新版本的KO,您必须在调用它之前检查它是否存在。我会更新答案来演示。 – 2013-05-06 15:50:00