2014-01-13 69 views
0

淘汰賽自定義綁定的「選項」我使用基因敲除的選項結合這樣的綁定

<select id="mydata" data-bind="options: mydata, 
      optionsText: function(item) {return getText(item); }, 
       optionsValue:'dataId', 
       optionsCaption:'Choose...'"> 

</select> 

我想申請jquery Chosen plugin的下拉列表,每當`「MYDATA」的變化,我想申請選擇更新。所以我認爲最好的方式是通過自定義綁定。我在網上發現了一個簡單的例子,其實質上是「選項」綁定的包裝,如下所示:

ko.bindingHandlers.chosen = { 
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) { 
     ko.bindingHandlers.options.init(element); 
     $(element).chosen(); //i added this 
    }, 
    update: function (element, valueAccessor, allBindingsAccessor, viewModel) { 
     ko.bindingHandlers.options.update(element, valueAccessor, allBindingsAccessor); 
     $(element).trigger("chosen:updated");//i added this 
    } 

};

但是我在哪裏指定optionsText, optionsValue, OptionvCaptions這個自定義綁定?謝謝。

+0

爲什麼你需要指定'optionsText,optionsValue, OptionvCaptions'再次? –

回答

0

optionsText, optionsValue, OptionvCaptions都是allBindingsAccessor參數的一部分。因此,您可以像通常那樣在數據綁定中指定它們,並將它們傳遞給您的發佈代碼,或者您可以在更新綁定中鍵入默認值。我覺得你真的想要做的是在你的模板指定他們並沒有投入應用特定的邏輯在你的綁定,但如果你真的想...

ko.bindingHandlers.chosen = { 
    init: function (element, valueAccessor, allBindingsAccessor, viewModel) { 
     //options.init only takes one parameter 
     ko.bindingHandlers.options.init(element); 
     $(element).chosen(); //i added this 
    }, 
    update: function (element, valueAccessor, allBindingsAccessor) { 
     //options.update takes 3 parameters 
     //we want the chosen binding to have defaults, if they aren't specified alr 
     allBindingsAccessor.optionsText = allBindingsAccessor.optionsText || function(item) {return window.MyApplication.GetText(item)}; 
     allBindingsAccessor.optionsValue = allBindingsAccessor.optionsValue || 'dataId'; 
     ko.bindingHandlers.options.update(element, valueAccessor, allBindingsAccessor); 
     $(element).trigger("chosen:updated");//i added this 
    } 
+0

感謝您的解釋。有效 :) – neo