我正在创建一个<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>
抱歉,有点着急,所以可能会有错别字,但您明白了。