javascript - knockout : Change css class based on value of observable

标签 javascript css knockout.js

我在可观察数组上使用 foreach:

<div id="mainRight" data-bind="foreach: notifications">
    <div class="statusRow">
        <div class="leftStatusCell">
            <div class="leftStatusCellColor" data-bind="css: availabilityCssClass($data.availability)"></div>
        </div>
        <div class="topRightStatusCell" data-bind="text: sip"></div>
        <div class="bottomtRightStatusCell ellipsisSingleline" data-bind="text: note"></div>
    </div>
</div> <!== end mainRight ==>

如您所见,我将可用性的当前值传递给函数 availabilityCssClass,该函数将该值与一些预定义的字符串进行比较。根据匹配的字符串,它返回一个类名。

self.availabilityCssClass = ko.computed(function (value) {
    var availability = value;
    if (availability === "Busy" || "DoNotDisturb" || "BeRightBack")
        return "leftStatusCellColorOrange";
    else if (availability === "Away" || "Offline")
        return "leftStatusCellColorRed";
    else
        return "leftStatusCellColorGreen";
});

这是我的模型。数据来自外部数据源。

function Notification(root, sip, availability, note) {
    var self = this;

    self.sip = ko.observable(sip);
    self.availability = ko.observable(availability);
    self.note = ko.observable(note);
};

self.notifications = ko.observableArray();

但是,它并没有按原样工作。当计算函数未被注释掉时,foreach 不会遍历数据并且 div 为空。但是我可以看到 viewModel 不是空的。

最佳答案

您不能以这种方式将值传递给计算。最好将此计算添加到 Notification View 模型并使用 self.availability 属性:

function Notification(root, sip, availability, note) {
    var self = this;

    self.sip = ko.observable(sip);
    self.availability = ko.observable(availability);
    self.note = ko.observable(note);

    self.availabilityCssClass = ko.computed(function() {
        var availability = self.availability();

        if (["Busy", "DoNotDisturb", "BeRightBack"].indexOf(availability) != -1) return "leftStatusCellColorOrange";
        else if (["Away", "Offline"].indexOf(availability) != -1) return "leftStatusCellColorRed";
        else return "leftStatusCellColorGreen";
    });
};

您的 if 语句不正确,所以我修正了逻辑。这是工作 fiddle :http://jsfiddle.net/vyshniakov/Jk7Fd/

关于javascript - knockout : Change css class based on value of observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13453413/

相关文章:

css - 我可以响应式地在 HTML5 <details> 上设置 "open"属性吗?

javascript - 获取带有 DST 设置的 JavaScript 时区字符串

javascript - 使用 Jquery 单击时将链接灰显

javascript - 如何找到 div 中的所有链接,将它们添加到 DOM 并给出链接数

javascript - Knockout JS 样式绑定(bind)导致错误

html - Knockout.js:有条件地绑定(bind) div 的标题属性

javascript - 没有视频,但我能听到声音 - knockout.js 与 video.js 的自定义绑定(bind)

javascript - 如何让 CommonJS 模块执行它的 main()(就像在 Python 中一样)?

javascript - 如何在 Jquery 中使用动态元素

javascript - 动画显示 :none to display:inline