2014-06-26 7 views
15

Şu anda yalnızca bırakma sırasında etkinleştirme bağlamasındaki tüm açılır menüyü etkinleştirebilir/devre dışı bırakabilirim. Enable = false olduğunda, tüm açılır menü artık tıklanabilir değildir ve kullanıcı açılır menüdeki diğer olası değerleri göremez.Knockout select dropdown devre dışı bırakma öğesini etkinleştir

<select disabled=""></select> 

Ne yapmak umuyorum Hala seçenekleri görebilirsiniz Bu

<select> 
<option disabled="disabled" value='1'>One </option> 
<option selected="select" value='2'>Two </option> 
<option disabled="disabled" value='3'>Three </option> 
</select> 

Bu şekilde gibi bir şey işlemek ama onlar:

<select data-bind="options: OptionsList, optionsText: 'Key', optionsValue: 'Value', value: FieldValue, enable: Enable"></select> 

neyi hale got şudur hepsi devre dışı bırakıldı, böylece kullanıcı bunları değiştiremez.

Nakavt sırasında optionsAfterRender'a baktım, ancak seçilen değere artık erişemiyorum. Girilen öğe, gözlenebilir değil, yalnızca seçilen öğenin anahtarı ve değeridir.

Herhangi bir yardım çok takdir edilecektir. Teşekkür

cevap

14
Sen gibi foreach kullanarak option elemanlarını oluşturmak için seçebilirsiniz

:

<select data-bind="value: selected, foreach: options"> 
    <option data-bind="attr: { disabled: !enabled(), value: value }, text: name"></option> 
</select> 

Örnek: Aksi http://jsfiddle.net/rniemeyer/4PuxQ/

, burada Michael Best gelen bağlayıcı bir optionsBind bir örneğidir Bağlayıcı izin verirdim bir foreach kullanmadan seçenek (optionsAfterRender işlevini kullanır):

Örnek: http://jsfiddle.net/rniemeyer/KxY44/

+2

(http://stackoverflow.com/questions/24303689/knockout-multiselect-selectedoptions-contains-: Burada

<select data-bind="options: OptionsList, optionsText: 'Key', optionsValue: 'Value', value: FieldValue, optionsAfterRender: setOptionDisable"></select> self.setOptionDisable = function(option, item) { ko.applyBindingsToNode(option, {disable: item.disable}, item); } 

http://knockoutjs.com/documentation/options-binding.html çalışma bunun bir demo nesneler yerine değerler/24303773 # 24303773) bunu yapmanın başka bir yoludur. 3.1.0 –

1

Devre dışı bırakma seçenekleri için optionsAfterRender'ı kullanabilirsiniz. Seçeneği etkinleştirmek veya devre dışı bırakmak için itiraz etmek için bir tane daha gözlemlenebilir özellik sağlamalısınız.

Kodu: -

//Optionlist will look like this 
    OptionsList: ko.observableArray([{ 
    Key: 1, 
    Value: "Jack", 
    disable: ko.observable(false) 
    }, { 
    Key: 2, 
    Value: "Jhon", 
    disable: ko.observable(false) 
    }]), 

    //Function will be used in optionsAfterRender 
    setOptionDisable: function (option, item) { 
     ko.applyBindingsToNode(option, { 
     disable: item.disable 
     }, item); 
    } 

Fiddle Demo

7

Seçeneklerde engelli uygulamak için optionsAfterRender kullanmak gerekir. Belgelerde açıklanan oluyor: [Burada] http://jsfiddle.net/vkFUC/

+0

Mükemmel bir çözüm gerektirir. Teşekkürler. Bunu kullanırken, optionsCaption bağlayıcısını kullanıyorsanız durumu ele aldığınızdan emin olun. –