2015-09-06 41 views
2

我正在使用敲除来创建选择列表。每个选择项都是一个包含一对变量的对象。当选择一个项目时,我想在span中显示所选对象的另一个变量。敲除显示选择的数据

该选择有效,但没有数据显示在包含data1:文本的范围中。

任何想法?

小提琴这里:http://jsfiddle.net/e24zoyp6/

代码: JS

var _ViewModel = {}; 

$(document).ready(function() { 
    setupView(); 
}); 

function setupView() { 
    var Month = function (longName, shortName, value) { 
     this.ShortName = shortName; 
     this.MonthName = longName; 
     this.MonthNumber = value; 
    }; 

    _ViewModel = { 
     // These are the initial options 
     monthSelection: ko.observableArray([ 
      new Month("January", "Jan", 1), 
      new Month("February", "Feb", 2), 
      new Month("March", "Mar", 3) 
     ]), 
     SelectedMonth: ko.observable() 
    }; 

    ko.applyBindings(_ViewModel); 
} 

的Html

<select data-bind=" 
    options: monthSelection, 
    optionsText: 'MonthName', 
    optionsValue: 'MonthNumber', 
    value: SelectedMonth, 
    optionsCaption: 'Which Month?'">    
</select> 

<div data-bind="visible: SelectedMonth"> data1: 
    <span data-bind="text: SelectedMonth() ? SelectedMonth().ShortName : 'unknown'"></span> 
</div> 

回答

2

您目前正在使用MonthNumber为您optionsValue。这意味着您的SelectedMonth将只包含月份的编号,而不包含整个Month对象,因此您的text绑定不起作用。

要修复它只是删除optionsValue: 'MonthNumber',,当你改变选择KO将使用整个对象:

<select data-bind=" 
    options: monthSelection, 
    optionsText: 'MonthName', 
    value: SelectedMonth, 
    optionsCaption: 'Which Month?'">    
</select> 

演示JSFiddle

+0

啊,谢谢。刚刚开始与KO。还不习惯所有的“魔术”。 – JensB

+0

当你在html代码中添加'value =“”'到'option'时,当你不指定'value'的时候也会感到困惑。 – JensB