敲掉掉落 - 使用Bool值

时间:2013-12-11 19:01:07

标签: javascript knockout.js

我正在开发一个由布尔值驱动的下拉控件。我有一个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);

感谢您的帮助,

〜大卫

2 个答案:

答案 0 :(得分:0)

如果我理解您尝试做什么,那么您的问题在于您传递给'CreateImplantEditViewModel'构造函数的数据。您需要将IsActive创建为可观察的,否则它将永远不会更新:

var editImplantVm = CreateImplantEditViewModel({
    IsActive: ko.observable(false)
},
getLookupData());

我已更新您的jsfiddle,当您更改所选选项时,这两个下拉菜单现在都会更新其关联的文本绑定。

答案 1 :(得分:0)

这里的问题实际上是将布尔值转换为字符串值。要使其工作,值必须是字符串或数字。

相关问题