2013-07-17 12 views
7

Knockout 2.3.0 ile optionsAfterRender bağlaması tanıtıldı, böylece seçenekler oldukça esnek bir şekilde değiştirilebilir.Knockout devre dışı bırak seçenek seçeneği altyazısı

Seçeneklerin altyazısını devre dışı bırakmak istiyorum. Şu anda çalışır

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

yapıyorum ama kopyalamak ve her yerde optionsAfterRender fonksiyonunu yapıştırmak zorunda. Tek bir yerde bunu yapmak için özel bir bindingHandler oluşturmaya çalışıyorum ama zorlanıyorum. Herhangi bir yardım mutluluk duyacağız

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.: Bu benim defa bindingHandler olduğunu!

cevap

3

Böyle, adım adım, hep birlikte bağlamaları geçerli değildir olmalıdır:

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

      } 
     }); 
    } 
};