【发布时间】:2015-10-31 02:56:51
【问题描述】:
我有一个布尔变量,它使用 KnockoutJS 中的这个元素进行绑定:
<span data-bind="text: myBooleanVar"></span>
我想在 UI 中显示是或否,而不是真或假。我尝试了不同的函数将值转换为是或否,但它们不起作用。 我认为应该有一个简单的方法来做到这一点。有人可以帮忙吗?
【问题讨论】:
标签: knockout.js
我有一个布尔变量,它使用 KnockoutJS 中的这个元素进行绑定:
<span data-bind="text: myBooleanVar"></span>
我想在 UI 中显示是或否,而不是真或假。我尝试了不同的函数将值转换为是或否,但它们不起作用。 我认为应该有一个简单的方法来做到这一点。有人可以帮忙吗?
【问题讨论】:
标签: knockout.js
您可以将逻辑放在视图中(@Ravi Dasari 的回答)或将其放在视图模型中(@dperry 的回答),但我认为自定义绑定也是一种适用的方法。
<span data-bind="boolean: myBooleanVar"></span> <!-- (Defaults to "Yes" or "No")-->
<span data-bind="boolean: myBooleanVar, trueText: 'Absolutely', falseText: 'Negative'"></span>
ko.bindingHandlers.boolean = {
update: function (element, valueAccessor, allBindings) {
var bool = ko.utils.unwrapObservable(valueAccessor()),
trueText = allBindings.get('trueText') || 'Yes',
falseText = allBindings.get('falseText') || 'No';
$(element).text(bool ? trueText : falseText);
},
};
【讨论】:
使用下面的代码行 - 使用条件运算符。
<span data-bind="text: myBooleanVar? 'Yes' : 'No'"></span>
【讨论】:
Ravi 的回答有效,但在您的观点中包含类似的逻辑并不是最佳实践。您可以创建敲除计算函数或辅助函数:
var viewmodel = function() {
var self = this;
// the actual value (not attached to self to keep it private)
var myBooleanVar = ko.observable(true);
// wrapped version for the UI
self.myBooleanUI = ko.computed(function(){
return self.myBooleanVar() ? 'Yes' : 'No';
});
}
观点:
<span data-bind="text: myBooleanUI"></span>
【讨论】: