2013-07-17 103 views
7

隨着淘汰賽2.3.0 optionsAfterRender綁定已引入,使選項可以相當靈活地改變。淘汰賽禁用選擇選項標題

我想禁用選項標題。目前,我正在做

<select data-bind="options: items, optionsCaption:'please select', optionsAfterRender: function(option, item) { ko.applyBindingsToNode(option, {disable: !item}, item); }"></select> 

其作品,但我一定要複製和粘貼無處不在optionsAfterRender功能。我一直在試圖創建一個自定義綁定處理器來在一個地方做,但我有困難。 這是我bindingHandler至今:

ko.bindingHandlers.disableOptionsCaption = { 
    init: function (element) { 

     ko.applyBindingsToNode(element, { 
      optionsAfterRender: function (option, item) { 

       ko.applyBindingsToNode(option, { 
        disable: !item 
       }, item); 

      } 
     }); 

    } 
}; 

I've also created a fiddle here that shows the working version and non-working.任何幫助,將不勝感激!

回答

3

你應該適用所有綁定在一起的,不能按部就班,像這樣:

的Html

<select data-bind="disableOptionsCaption:{}"></select> 

JS

ko.bindingHandlers.disableOptionsCaption = { 
    init: function (element,valueAccessor, allBindingsAccessor, viewModel) { 

     ko.applyBindingsToNode(element, { 
      options: viewModel.items, 
      optionsCaption: 'please select', 
      optionsAfterRender: function (option, item) { 

       ko.applyBindingsToNode(option, { 
        disable: !item 
       }, item); 

      } 
     }); 
    } 
};