Knockout.js 在淘汰3中,更改不可见值的类的首选方法是什么?

Knockout.js 在淘汰3中,更改不可见值的类的首选方法是什么?,knockout.js,knockout-3.0,Knockout.js,Knockout 3.0,我有一个可观察的数组项。生成一个无序列表,形成nav。我想将类active应用于单击的项目,并将其从所有其他项目中删除。我尝试设置一个静态的css:{active:true},但是由于active不是项的真实属性,我不确定如何实现它 我称之为不可观察的值,因为我不想将active类与items数组关联,只想根据需要在DOM上更改它 <ul id='nav' data-bind="foreach: items"> <li data-bind="css: {selected

我有一个可观察的数组
。生成一个无序列表,形成nav。我想将类
active
应用于单击的项目,并将其从所有其他项目中删除。我尝试设置一个静态的
css:{active:true}
,但是由于
active
不是项的真实属性,我不确定如何实现它

我称之为不可观察的值,因为我不想将
active
类与items数组关联,只想根据需要在DOM上更改它

<ul id='nav' data-bind="foreach: items">
    <li data-bind="css: {selected: false}">
        <a data-bind="text: name, click: click_nav"></a>
    </li>
</ul>

您可以将当前“活动”项存储在
AppViewModel
的可观察属性中,您可以在
单击导航功能中进行设置

function AppViewModel() {
    this.items = ko.observableArray([
        { name: 'Course 1' },
        { name: 'Course 2' },
        { name: 'Course 3' }
    ]);    
    this.active = ko.observable();
    this.click_nav = function(item){
        this.active(item);
    };
}
您可以将当前项(
$data
)与
css
绑定中的
活动项进行比较:

<ul id='nav' data-bind="foreach: items">
    <li data-bind="css: {selected: $parent.active() == $data}">
        <a data-bind="text: name, click: $parent.click_nav.bind($parent)"></a>
    </li>
</ul>