Knockout JS css“else”条件

时间:2012-09-28 12:41:34

标签: knockout.js

我想在Knockout中这样做。

    <span class="badge" data-bind="text: rank, css: {'badge-success': firstPlace, 
        'badge-warning': !firstPlace}"></span>

我的javascript模型类有这个方法

    self.firstPlace = ko.computed(function() {
        return self.rank() == 1;
    });

这无法生成“徽章警告”类。我在数据绑定属性中尝试了一些调用变体,例如firstPlace == false(!firstPlace)。相反,我必须在我的模型中添加第二个反向方法:

    <span class="badge" data-bind="text: rank, css: {'badge-success': firstPlace, 
        'badge-warning': notFirstPlace}"></span>


    // YUCK
    self.notFirstPlace = ko.computed(function() {
        return self.rank() != 1;
    });

当然,这很有效。对于Knockout JS来说真的很有趣,这真的很有趣。但这似乎是错的。有人有更好的方法吗?

2 个答案:

答案 0 :(得分:20)

在data-bind属性中使用逻辑运算时,应将()放在可观察或计算名称之后。

<span class="badge" data-bind="text: rank, css: {'badge-success': firstPlace, 
    'badge-warning': !firstPlace()}"></span>

答案 1 :(得分:4)

如果您只想评估firstPlace() 一次,可以将css绑定编写为内联函数:

<span class="badge" data-bind="text: rank, css: (firstPlace() ? 'badge-success' : 'badge-warning')"></span>