这是小提琴:http://jsfiddle.net/bnxtm/1/
您可以看到,即使新顾问具有Commercial
角色,SELECT会显示Consultant
而不是Commercial
。如何使选择元素显示顾问角色的名称?
值绑定比较对象引用与所选值匹配。
列表中的角色对象和所选对象没有共享相同的参考
http://jsfiddle.net/bnxtm/4/
var c1 = new Consultant("Foo BAR", ko.utils.arrayFirst(contractViewModel.availableRoles, function(item) {
return item.tag === "Co";
}));
您可以做的是创建一个可与纯值一起使用的计算,而不是对象:
self.role = ko.observable(role);
self.role.forSelect = ko.computed({
read: function() {
return self.role().tag;
},
write: function(newValue) {
self.role(contractViewModel.getRole(newValue));
}
});
这种方式role
将永远是availableRoles
中的对象之一。
请参阅http://jsfiddle.net/eckl9/