我想在页面上显示一个布尔值(实际上它是表中的单元格),并且它必须是可编辑的。此外,它不是一个复选框,但我拼写错误"和"真"。我们使用bootstrap 3和最新的淘汰赛。我决定使用x-editable Bootstrap 3 build。我还使用了淘汰赛自定义绑定:https://github.com/brianchance/knockout-x-editable。
我认为要实现这一点,我需要将x-editable配置为处于弹出模式,然后选择type。我还在参数中提供选择(" true"和" false"仅在这种情况下)。除了当弹出窗口中的就地对话框没有显示当前值时,几乎所有东西都很精致和花花公子。我该如何解决这个问题?我试过了默认值'参数,但它没有帮助。
这是小提琴: http://jsfiddle.net/csabatoth/7ybVh/4/
<span data-bind="editable: value,
editableOptions: { mode: 'popup', type: 'select',
source: '[{ value: 0, text: "false" },
{ value: 1, text: "true" }]' }">
</span>
简单模型:
function ViewModel() {
var self = this;
self.value = ko.observable(false);
}
答案 0 :(得分:2)
问题是,您的observable中有true
和false
布尔值,但x-editable使用0
和1
值来表示“true”和“虚假”选择。
这会导致两个问题:
value
observable将包含“0”和“1”字符串,而不包含false
和true
布尔值... 您可以通过对可在布尔值和数值之间进行转换的计算属性进行检测来解决这两个问题:
self.computed = ko.computed({
read: function() { return self.value() ? 1 : 0 },
write: function(newValue) { self.value(newValue == '1') }
});
您需要在editable
绑定中使用此属性:
<span data-bind="editable: computed,
editableOptions: { mode: 'popup', type: 'select',
source: '[{ value: 0, text: "false" },
{ value: 1, text: "true" }]' }">
</span>
演示JSFiddle。