我有下拉列表的这个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属性绑定到下拉列表。我如何实现这一目标?
答案 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。我添加了简单的功能来添加项目到列表,所以你会看到如何做到这一点。