Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过一个函数和一个绑定来剔除CSS样式_Javascript_Css_Knockout.js - Fatal编程技术网

Javascript 通过一个函数和一个绑定来剔除CSS样式

Javascript 通过一个函数和一个绑定来剔除CSS样式,javascript,css,knockout.js,Javascript,Css,Knockout.js,我知道您可以使用knockout根据函数返回设置类,如下所示 <span data-bind="css: styling()"></span> 还可以使用真/假值内联设置它们 <span data-bind="css: {className: $parent.active() == $data}"></span> 有没有一种方法可以在一个绑定中同时完成这两个任务?我的示例是,我希望根据span元素显示的项目类型返回一个自定义类(其中将有

我知道您可以使用knockout根据函数返回设置类,如下所示

<span data-bind="css: styling()"></span>

还可以使用真/假值内联设置它们

<span data-bind="css: {className: $parent.active() == $data}"></span>

有没有一种方法可以在一个绑定中同时完成这两个任务?我的示例是,我希望根据span元素显示的项目类型返回一个自定义类(其中将有许多),但如果选择了它们,我还希望它们高亮显示

似乎无法在对象的右侧使用函数,并且使用两个函数会导致第二个函数覆盖第一个函数


有什么想法吗?

通过此示例,您可以指定每个项目的类别

查看

<div data-bind="foreach: items" >
    <span data-bind="css : $parent.styling($data), text: $data"></span>
</div>
<div data-bind="foreach: items" >
    <span data-bind="css : styling, text: name, click : toggle"></span>
    <br/>
</div>


编辑:

var vm = {
    items : ['a','b','c' ],

    styling : function(item ) {
        if(item =='a') return 'active';
        if(item =='b') return 'active bold';
        return '';
    }    
};

ko.applyBindings(vm);
@Shadow:你说得对,如果你把一个值传递给一个计算机,它就是设置(或写入)它

我想这会符合你的需要。 在项目上,将调用切换函数。 然后,将更改活动的可观察对象,并最终计算样式

JS

var Item =  function(data) {
    var self = this;
    self.name = data;
    self.active = ko.observable(false);
    self.styling = ko.computed(function(item ) {
        if(self.active()) return 'active';
        return '';  
    });
    self.toggle =  function(){
        self.active(!self.active());
    }
};

var vm = {
    items : [new Item('a'),new Item('b'), new Item('c') ]        
};


ko.applyBindings(vm);
查看

<div data-bind="foreach: items" >
    <span data-bind="css : $parent.styling($data), text: $data"></span>
</div>
<div data-bind="foreach: items" >
    <span data-bind="css : styling, text: name, click : toggle"></span>
    <br/>
</div>



Sortof方向正确-但在我的例子中,阵列中充满了子视图。如果我可以从父视图调用子视图中的函数,这个答案可能会起作用。。。你知道你是否能通过它吗?事实上,这似乎不起作用,因为我们没有使用可观察的。这意味着我无法跟踪活动项(从而将样式添加到其中)。据我所知,您不能将参数传递给ko.computed。还有其他想法吗?