将css类绑定到观察到的模型属性

Dav*_*ave 31 knockout.js

我想将divs css类绑定到视图模型的属性,如下所示:

<div id="statusIndicator" data-bind="css: selectedPriority">
Run Code Online (Sandbox Code Playgroud)

但这会产生结果:

 <div id="statusIndicator" class=" 0 1 2 3">
Run Code Online (Sandbox Code Playgroud)

这是视图模型:

myViewModel = {
    selectedPriority: ko.observable('High'),
    Company: ko.observable("Bert"),
    Rows: ko.observableArray([
         new row(),
         new row(),
         new row()
    ]),
    Tabs: ['High', 'Medium', 'Low'],

    selectPriority: function (tab) {
        this.selectedPriority(tab);
    }
};
Run Code Online (Sandbox Code Playgroud)

因此,当我加载使用此视图模型的页面时,我希望div为:

<div id="statusIndicator" class="High">
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

RP *_*yer 43

对于这种情况,你可以这样做:

<div data-bind="attr: { 'class': selectedPriority}">
Run Code Online (Sandbox Code Playgroud)

这种方法唯一的缺点是它会直接设置类,而不是打开或关闭一个类,所以如果你使用多个类,那么selectedPriority需要包含完整的类列表.

  • 是的,它在2.0中仍然是相同的.有一个绑定的例子可以在这里打开和关闭一个类(而不是完成替换类属性):https://github.com/SteveSanderson/knockout/wiki/Bindings---class. (4认同)
  • 看起来Knockout 2.2.0现在支持这些类型的绑定.我在2.1.x中遇到此问题,并更新到2.2.0,现在可以使用了. (4认同)

Nic*_*een 6

看起来你不能直接从你的模型中设置一个类:http://knockoutjs.com/documentation/css-binding.html

你做不到这样的事情:

 <div data-bind="css: { high: selectedPriority() == 1, medium: selectedPriority() == 2}">
Run Code Online (Sandbox Code Playgroud)