使用knockoutjs将css类名绑定到viewmodel

bas*_*nne 6 knockout.js

我正在做这个css绑定:

css: { greenBorder: hasGreenBorder, whiteBorder: hasWhiteBorder, blackBorder: hasBlackBorder }
Run Code Online (Sandbox Code Playgroud)

这有效,但为什么我的viewmodel不仅返回像.whiteBorder或.blackBorder这样的css类名.

因为我的逻辑是所有3个变量中的变量只有一个真实,其他变量总是假的.

我认为必须有一个更好的方法来应用类名并将此逻辑放在我的viewmodel中选择哪个类名,对吧?

dav*_*d.s 6

您可以使用attr绑定.

data-bind="attr: { class: yourClass }"
Run Code Online (Sandbox Code Playgroud)


Dam*_*ien 1

正确的方法

绑定就是您正在寻找的。

此绑定允许您为元素设置任意 css 类。它需要 jQuery。

用法 :

<div data-bind="class: single">Single Observable Class</div>
<div data-bind="class: multiple">Multiple Observable Classes</div>



var vm = {
    single: ko.observable("red"),
    multiple: ko.observableArray(["blue","small"])
};
vm.change = function () {
    vm.single(vm.single() === "red" ? "black" : "red");

    if (vm.multiple.indexOf("small") > -1) {
        vm.multiple.remove("small");
        vm.multiple.push("big");
    } else {
        vm.multiple.remove("big");
        vm.multiple.push("small");
    }    
};
Run Code Online (Sandbox Code Playgroud)

我希望它有帮助

  • 正确的方法?data-bind="attr: { class: yourClass }" 有什么问题吗? (2认同)