视图模型:
function Specialization(id, name) {
var self = this;
self.id = id;
self.name = name;
}
function ObservableSpecialization() {
var self = this;
self.availableItem = ko.observable();
}
function ViewModel() {
var self = this;
self.specializations = ko.observableArray([]);
self.availableSpecializations = [];
self.addSpecialization = function () {
self.specializations.push(new Specialization());
}
self.removeSpecialization = function (specialization) {
self.specializations.remove(specialization)
}
}文档加载:
$(document).ready(function () {
var model = new ViewModel();
var temp = [];
$.each(window.availableSpecializations, function (i, item) {
var specialization = new Specialization(item.ID, item.Name);
model.availableSpecializations.push(specialization);
temp.push(item.ID);
});
$.each(window.userSpecializations, function (i, item) {
var idx = temp.indexOf(item.ID);
if (idx != -1) {
var available = model.availableSpecializations[idx];
var specialization = new ObservableSpecialization();
specialization.availableItem = available;
model.specializations.push(specialization);
}
});
ko.applyBindings(model);
});<select>代码片段:
<tbody data-bind="foreach: specializations">
<tr>
<td>
<select name="Specializations" data-bind="options: $root.availableSpecializations, value: 'availableItem', optionsText: 'name'">
</select>
</td>结果:
正如您在下面看到的,所有值始终设置为列表中的第一项。我猜ID不知何故没有绑定到所选项目...我哪里错了?

发布于 2012-06-30 11:40:30
有两个问题:首先,specialization.availableItem是一个可观察的对象,因此应该分配一个函数调用:specialization.availableItem(available)
其次,在绑定字符串中有value: 'availableItem',它只是将select值设置为字符串'availableItem‘。应该不带引号:value: availableItem
这里有两个补丁:jsfiddle
https://stackoverflow.com/questions/11270970
复制相似问题