2012-10-03 62 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