knockout.js - 为什么 KnockoutJS 将类属性设置为 "0 1 2 3 4 5 startsWith"?

标签 knockout.js

我有以下 HTML 片段:

<table class="answerGrid" data-bind="foreach: rows">
    <tr data-bind="foreach: $data">
        <td>
            <button data-bind="click : $root.onAnswerClick, css: isSelected" type="button">
                <div data-bind="html: $data.text" style="height: 100%"></div>
            </button>
        </td>
    </tr>
</table>

我想做的是通过 isSelected 计算函数动态设置 button 元素的 class 属性:

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

    self.id = "";
    self.text = "";
    self.selected = ko.observable(false);

    self.isSelected = ko.computed(function () {
        return self.selected() ? "selected-answer" : "answer";
    }, self);
};

该函数正在执行,并且我检查了由于尚未选择Answer而返回了文本“answer”。但是,当我查看输出的 HTML 时,它看起来像这样:

<td>
    <button data-bind="click : $root.onAnswerClick, css: isSelected" type="button" class="0 1 2 3 4 5 startsWith">
        <div data-bind="html: $data.text" style="height: 100%">4-7 days</div>
    </button>
</td>

我完全困惑为什么 KO 将 class 属性设置为“0 1 2 3 4 5startsWith”。

有人可以帮我吗?

最佳答案

我将使用不同的方法:

<button data-bind="css: { 'answer': !selected(), 'selected-answer': selected() }" type="button">
    <span>Testing</span>
</button>​

所以我根本不会使用计算函数,而是直接访问答案的 selected 属性。我通过这个问题找到了这项技术:

KnockoutJS css binding != true

关于knockout.js - 为什么 KnockoutJS 将类属性设置为 "0 1 2 3 4 5 startsWith"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13434716/

相关文章:

javascript - 剑道击倒 : widget observable is not filled with the actual widget

带有 knockout 数据绑定(bind)的复选框在选中的事件上给出错误的值

javascript - knockout 切换嵌套项目的可见性

javascript - 如何在使用knockout js更改下拉选择之前提示用户

knockout.js - 我可以使用 knockout 作为模板引擎吗?

knockout.js - knockout Js : Get the bound element from a model instance

knockout.js - 计算值的数组语义

javascript - 为什么我们在 Javascript 的类中需要 "var self = this"?

Knockout.js - 无法包装 'with' 、 'foreach' 和其他模板绑定(bind)

javascript - knockoutjs 如果绑定(bind)问题