在淘汰赛中绑定下拉列表

时间:2014-09-05 14:46:27

标签: javascript asp.net-mvc knockout.js

我有下拉列表的这个Javascript代码

 $('#TravelG').append("<option value selected>Select TravelG</option>");
    for (var i = 0; i < Travel.length; i++) {
        $('#TravelG').append("<option value='" +
 Travel[i].Id + "'>" + Travel[i].Name + "</option>");
    }

我需要在knockout中重写上面的代码,因为我有这个可观察的数组,

viewModel.Travelname = ko.observableArray([]);

我需要将viewmodel的这个Travelname属性填充为名称,值对,而Travel是包含数据的对象。这样我就可以将viewmodel的这个Travelname属性绑定到下拉列表。我如何实现这一目标?

1 个答案:

答案 0 :(得分:0)

正如@hunch_hunch在评论中正确提到的那样,你应该使用knockout options binding

假设您的Travel模型如下所示:

function Travel(id, name) {
    this.Id = id;
    this.Name = name;
}

然后在您的视图模型中,您的observableArray包含Travel个对象的集合(this引用视图模型):

this.Travelname = ko.observableArray([new Travel(1, 'Moscow'), new Travel(2, 'Paris'), new Travel(3, 'San Francisco')]);

最后一部分是你的标记,应该是这样的:

<select data-bind="options: Travelname, optionsText: 'Name', optionsValue: 'Id', optionsCaption: 'Select travel...'"></select>

这是最终工作demo。我添加了简单的功能来添加项目到列表,所以你会看到如何做到这一点。