我正在开发一个由布尔值驱动的下拉控件。我有一个viewmodel,它包含查找数据集数组(值和文本属性)以及一个包含布尔值的数据集,该值需要与数组中选择的值对齐。因此,viewmodel中的数据表示实际数据项,而lookupdata基本上表示值对的映射。为了每个仅包含与其相关的信息的数据项,这两个项目确实需要彼此独立。
我已经能够获得一个示例工作,我将IsActive带到数据对象之外,因为它存在于viewmodel中并放在viewmodel中,但是当它在viewmodel中时我无法工作。我已经创建了一个JSFiddle,它在功能上演示了我希望用户看到的内容,以及我拥有它所属数据的那个,但下拉列表没有按预期工作。
有效映射到true和非活动映射为false。在它们之间切换也应该影响屏幕上的单词true / false。
http://jsfiddle.net/rodearly/xF78A/11/
<div data-bind="with: data">
<select data-bind="options: $root.lookupData.status, optionsText: 'text', optionsValue: 'value', value: IsActive"></select>
<label>Value: </label>
<span data-bind="text: IsActive"></span>
</div>
<div>Alternative</div>
<div>
<select data-bind="options: lookupData.status, optionsText: 'text', optionsValue: 'value', value: IsActive"></select>
<label>Value: </label>
<span data-bind="text: IsActive"></span>
</div>
function Item(id, name) {
this.id = ko.observable(id);
this.name = ko.observable(name);
}
function getLookupData() {
var lookupData = {};
lookupData.status = [{
text: "Active",
value: true
}, {
text: "Inactive",
value: false
}];
return lookupData;
}
CreateImplantEditViewModel = function (data, lookupData) {
var vm = {};
vm.data = ko.observable(data);
vm.IsActive = ko.observable(false);
vm.lookupData = {};
vm.lookupData.status = ko.observableArray(lookupData.status);
return vm;
};
debugger;
var editImplantVm = CreateImplantEditViewModel({
IsActive: false
},
getLookupData());
ko.applyBindings(editImplantVm);
感谢您的帮助,
〜大卫
答案 0 :(得分:0)
如果我理解您尝试做什么,那么您的问题在于您传递给'CreateImplantEditViewModel'构造函数的数据。您需要将IsActive创建为可观察的,否则它将永远不会更新:
var editImplantVm = CreateImplantEditViewModel({
IsActive: ko.observable(false)
},
getLookupData());
我已更新您的jsfiddle,当您更改所选选项时,这两个下拉菜单现在都会更新其关联的文本绑定。
答案 1 :(得分:0)
这里的问题实际上是将布尔值转换为字符串值。要使其工作,值必须是字符串或数字。