【问题标题】:How to convert the boolean value to yes or no in knockout?如何在淘汰赛中将布尔值转换为是或否?
【发布时间】:2015-10-31 02:56:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 在你的观点中包含逻辑是一种禁忌。它确实应该作为辅助函数或淘汰赛计算推回视图模型
      • 如果 myBooleanVar 是一个 observable,除非你打开它,否则它不会起作用。
      【解决方案3】:

      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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-17
        • 2013-04-19
        • 1970-01-01
        • 2015-08-11
        • 2021-02-22
        • 2023-04-07
        • 2018-04-19
        • 2016-12-01
        相关资源
        最近更新 更多