我正在创建一个<li></li>列表,在其中循环浏览项目列表,如果该项目存在于myProjects中,则将突出显示该背景。

我需要两次使用此功能,一次用于背景属性,一次用于border属性。但是对我来说似乎必须重复运行两次,所以有没有办法将对象返回视图并在那里使用两次?还是有其他解决方法?

也许这不会对加载时间有多大影响?

模型

var vm = {
    myProjects: ko.observableArray(),
    projects: ko.observableArray(),
    inMyProjects: function (id) {
        var match = ko.utils.arrayFirst(vm.myProjects(), function (item) {
            return item.ProjectId() === id;
        });
        return match != null ? '#EEE' : '#777';
    }
};


视图

<ul class="projects" data-bind="foreach: projects">
    <li data-bind="text: Description, style: {
        backgroundColor: $parent.inMyProjects(ProjectId()),
        borderColor: $parent.inMyProjects(ProjectId())
    }">
    </li>
</ul>

最佳答案

使inMyProjects返回一个对象而不是该值,然后在其中重用该值:

var vm = {
        myProjects:ko.observableArray(),
        项目:ko.observableArray(),
        inMyProjects:函数(id){
            var match = ko.utils.arrayFirst(vm.myProjects(),函数(项目){
                返回item.ProjectId()=== id;
            });
            var result = match!= null吗? '#EEE':'#777';

    return {
        backgroundColor: result,
        borderColor: result
    };

    }
};


然后在视图中使用一次:

<ul class="projects" data-bind="foreach: projects">
    <li data-bind="text: Description, style: $parent.inMyProjects(ProjectId())">
    </li>
</ul>


抱歉,有点着急,所以可能会有错别字,但您明白了。

10-04 21:45