2012-09-25 111 views
1

我的代碼中選定值的跨度似乎並未填充到最初。誰能告訴我爲什麼這是?Knockout - 設置選擇的初始值

小提琴:http://jsfiddle.net/vVLdQ/

我的HTML:

<div> 
Disable: 
<span data-bind="text: options[1].text"></span><input type="checkbox" data-bind="checked: options[1].disable" /> 
<span data-bind="text: options[2].text"></span><input type="checkbox" data-bind="checked: options[2].disable" /> 
<span data-bind="text: options[3].text"></span><input type="checkbox" data-bind="checked: options[3].disable" /> 
</div> 
<div> 
<select data-bind="value: selectedValue"> 
<option data-bind="value: options[0].text, text: options[0].text"></option> 
<option data-bind="value: options[1].text, text: options[1].text, disable: options[1].disable"></option> 
<option data-bind="value: options[2].text, text: options[2].text, disable: options[2].disable"></option> 
<option data-bind="value: options[3].text, text: options[3].text, disable: options[3].disable"></option> 
</select> 
</div> 
<span data-bind="text: selectedValue"></span> 

我的javascript:

var selectModel; 

function OptionModel(text) { 
    var me = this; 
    me.text = text; 
    me.disable = ko.observable(false); 
    me.disable.subscribe(function(disableVal) { 
     if (disableVal && selectModel.selectedValue() == me.text) { 
      selectModel.selectedValue('-- Select --'); 
     } 
    }); 
} 
var options = [ 
    new OptionModel('-- Select --'), 
    new OptionModel('a'), 
    new OptionModel('b'), 
    new OptionModel('c') 
    ]; 
selectModel = { 
    options: options, 
    selectedValue: ko.observable(options[0].text) 
}; 
ko.applyBindings(selectModel);​ 
+0

爲什麼不使用[options](http://knockoutjs.com/documentation/options-binding.html)綁定來填充_select_? – gbs

+0

如果您可以告訴我一種通過綁定禁用選項的方法,我很樂意! –

+0

確實......我沒有看到使用選項的方法。這是另一種使用_foreach_替代的解決方案:[fiddle](http://jsfiddle.net/gbos/vVLdQ/5/) – gbs

回答

2

編輯:如nemesv在評論中說:「select data-bind="value: selectedValue"結合運行時,有尚未填充任何選項值,它將selectedValue重置爲null「。

從另一個StackOverflow的問題here,我想出了這個:

<select data-bind="foreach: options, value: selectedValue"> 
    <option data-bind="text: text, value: text, disable: disable"></option> 
</select> 

我也是在複選框周圍改變了一些事情,以及以使其更具可讀性。完整的例子見fiddle

+2

這是導致原始問題的數據綁定執行的順序。 'select data-bind ='value:selectedValue''bindings在沒有選項值填充時運行,它將'selectedValue'重置爲'null'。您的解決方案很好地解決了這個問題。 – nemesv

+0

謝謝,我認爲這可能是,但並不完全確定。我會編輯我的答案,以便每個人都可以輕鬆看到該信息。 – Rynan