如何在淘汰赛中将布尔值转换为是或否?

时间:2015-10-30 18:23:27

标签: knockout.js

我有一个布尔变量,它使用KnockoutJS中的这个元素进行绑定:

<span data-bind="text: myBooleanVar"></span>

我想在UI中显示yes或no,而不是true或false。我尝试了不同的函数将值转换为yes或no,但它们不起作用。 我认为应该有一个简单的方法来做到这一点。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:5)

您可以将逻辑放在视图中(@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);
    },
};

答案 1 :(得分:2)

使用下面的代码行 - 使用条件运算符。

<span data-bind="text: myBooleanVar? 'Yes' : 'No'"></span>

答案 2 :(得分:1)

拉维的回答是有效的,但在你看来,包括像这样的逻辑并不是最好的做法。您可以创建一个敲除计算函数或一个辅助函数:

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>