2012-10-03 63 views
2

也許我誤解了這是如何工作的。我想使用knockout.js來填充選擇元素選項。我使用下面的標記來實現這一目標:knockout.js沒有正確設置選項

<select data-bind="options: type_options, optionsText: function(item) { 
      return item.text; 
     }, optionsValue: function(item) { 
      return item.value; 
     }, optionsCaption:'Select a type...', 
     value: type"> 

下面是相關型號代碼:

var myModel = { 
    type: ko.observable(), 

    type_options: ko.observableArray([ 
     {text: "String 1", value:1}, 
     {text: "String 2", value:2}, 
     {text: "String 3", value: 3}, 
     {text: "String 4", value: 4}, 
     {text: "String 5", value: 5} 
    ]), 
} 

現在下拉正確呈現,所有正確的文本和值,但是當我選擇下拉菜單中的選項不會正確設置「類型」的值。

舉例來說,如果我選擇了標有「字符串4」的選項,並在瀏覽器中運行以下命令:

myModel.type() 

我希望它返回值「4」。相反,我得到的對象全部對象:

Object 
    text: "String 4" 
    value: 4 
    __proto__: Object 

我的問題是如何獲得淘汰賽設置類型的基於期權的價值屬性的值,而不是整個對象?

回答

4

那麼,你應該能夠在你的選項數組中傳遞變量的文本而不是函數。我不知道這是什麼造成的問題,而是你的標記會更好看像

<select data-bind="options: type_options, optionsText: 'text', optionsValue: 'value', optionsCaption:'Select a type...', value: type"></select> 

這應該得到你想要的東西,看到fiddle全例子。

+0

嗨,謝謝你的小提琴。我實際上使用視圖模型的json對象版本(請參閱上面我更新的代碼)。我嘗試將其更改爲函數形式,並發現左側和右側的問題,與此問題無關。你知道如何用JSON形式的視圖模型來做到這一點嗎? – aamiri

+0

@aamiri我已經更新了小提琴使用對象viewModel方向。 – Rynan

+0

我不知道爲什麼這不是爲我工作,但我重寫它,它的工作。我希望我知道它爲什麼不起作用,但感謝你的幫助。 – aamiri