【问题标题】:Yes or No instead of True or False in Knockout淘汰赛中是或否而不是真或假
【发布时间】:2015-08-11 22:17:07
【问题描述】:

在 Knockout 中,有一种简洁的方法可以从我的视图模型中显示布尔属性以显示“是”或“否”而不是 True / False。有时属性是未定义的,所以这也应该显示 No.

目前正在使用:

<td data-bind="text: isAvailable ? 'Yes' : 'No'"></td>

一定是更好的方法。

【问题讨论】:

  • if(!bool || typeof bool == undefined) bool='No';否则布尔='是'; ?不过,不明白为什么要替换功能齐全的布尔值。
  • 道歉@JazzCat。希望我的编辑可以澄清我的问题。您可以从标记中看到我想要实现的目标。

标签: javascript knockout.js binding boolean


【解决方案1】:

你可以使用这个自定义的 bindingHandler,

ko.bindingHandlers.YesNo = {
    update: function (element, valueAccessor) {
        // defaults to false
        var val = ko.utils.unwrapObservable(valueAccessor()) || false; 

        if (val)
            $(element).text("Yes");
        else
            $(element).text("No");
    }
}

像这样使用它,

<td data-bind="YesNo: isAvailable"></td>

谢谢

【讨论】:

  • 感谢您指引我正确的方向。我修改了您的代码以正确声明变量并删除未使用的变量 - 但我看到了您的想法,这是一个非常干净的解决方案。谢谢!
【解决方案2】:

如果您将isAvailable 定义为可观察的,您可以通过以下方式轻松实现:

JSFIDDLE

视图模型

var viewModel = function()
{
   var self = this;

   self.isAvailable = ko.observable(false);
};

查看

<td data-bind="text: $root.isAvailable() ? 'Yes' : 'No'"></td>

p/s:在处理可观察值时不要忘记使用()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2016-11-14
    • 1970-01-01
    相关资源
    最近更新 更多