2013-07-17 36 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); 

      } 
     }); 
    } 
};