2013-07-17 8 views
7

Con knockout 2.3.0 è stata introdotta l'associazione optionsAfterRender in modo che le opzioni possano essere modificate in modo flessibile.Sopprimere blocco opzione di selezione didascalia

Desidero disattivare la didascalia delle opzioni. Al momento sto facendo

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

che funziona, ma devo copiare e incollare la funzione optionsAfterRender ovunque. Ho cercato di creare un bindingHandler personalizzato per farlo in un posto, ma ho delle difficoltà. Questo è il mio bindingHandler finora:

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. Qualsiasi aiuto sarebbe apprezzato!

risposta

3

Si dovrebbe applicare tutte le associazioni insieme, non passo dopo passo, in questo modo:

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); 

      } 
     }); 
    } 
};