使用knockout切换css类

时间:2013-12-16 08:57:32

标签: jquery html css knockout.js

我想尝试这样做。它是一个有效的语法?我正在检查一些标志值并切换b / w两个css类?

<div data-bind="visible:'anchorJobContractor'===JobDetail_SelctedTab(), css:IsTabsCollapsed ? TabCollapsed : TabExpanded"></div>

第一部分可见的dataBinding对我有用。

5 个答案:

答案 0 :(得分:4)

这是 css 绑定的一种可能语法:

<div data-bind="css: { TabCollapsed: IsTabsCollapsed, TabExpanded: !IsTabsCollapsed() }"></div>

另见文档:http://knockoutjs.com/documentation/css-binding.html

答案 1 :(得分:1)

你能尝试在这样的大括号内包含CSS的逻辑:

<div data-bind="visible:'anchorJobContractor'===JobDetail_SelctedTab(), css: { IsTabsCollapsed ? TabCollapsed : TabExpanded }"></div>

或者您可以将逻辑移动到您的javascript中,而不是通过使用计算值在HTML中执行。

viewModel.myCssClass = ko.computed(function() {
    return IsTabsCollapsed ? "TabCollapsed" : "TabExpanded";
}, viewModel);


<div data-bind="visible:'anchorJobContractor'===JobDetail_SelctedTab(), css: myCssClass"></div>

答案 2 :(得分:0)

如果IsTabsCollapsed是一个可观察的,你必须这样做:

IsTabsCollapsed() ? TabCollapsed : TabExpanded

答案 3 :(得分:0)

您可以将CSS绑定与此类计算的observable一起使用。

<div data-bind="css: TabClass">
   ...
</div>

<script type="text/javascript">
    var viewModel = {
        IsTabsCollapsed: ko.observable(false);
    };
    viewModel.TabClass = ko.computed(function() {
        return this.IsTabsCollapsed() ? "TabCollapsed " : "TabExpanded";
    }, viewModel);
</script>

这不是实现你想要的最小和最干净的方式,但它很容易管理和改变,而且非常容易理解。

答案 4 :(得分:0)

免责声明:快速而肮脏的版本

我需要一种快速而又脏的方法将类应用于调试面板,并提出以下建议。

我建议这个版本仅用于调试,它只适用于你也使用jQuery。

<div class="debug-only knockout-debug-panel" 
            data-bind="click: function(data, event) { $(event.currentTarget).toggleClass('transparent'); }">

</div>

.transparent { opacity: .5; }

Knockout有一个函数toggleDomNodeCssClass,但不幸的是它需要一个布尔值来添加或删除该类。