2013-05-06 71 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