Knockoutjs - 使select选择显示observable的当前值作为默认值

时间:2014-01-27 13:56:24

标签: javascript knockout.js

这是一个小提琴:http://jsfiddle.net/BNXTm/1/

正如您所看到的,即使新顾问具有Commercial角色,选择也会显示Consultant而不是Commercial。如何使选择元素显示顾问角色的名称?

2 个答案:

答案 0 :(得分:1)

值绑定比较对象引用以匹配所选值。

列表中的Role对象和所选对象不共享相同的引用

http://jsfiddle.net/BNXTm/4/

var c1 = new Consultant("Foo BAR", ko.utils.arrayFirst(contractViewModel.availableRoles, function(item) {
    return item.tag === "Co";
}));

答案 1 :(得分:0)

你可以做的是创建一个使用普通值而不是对象的计算器:

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/