在子集合中的项目内容上创建计算属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在子集合中的项目内容上创建计算属性相关的知识,希望对你有一定的参考价值。
我正在建立一个菜单,我有一个category
对象,它有一个可观察的menuitem
s阵列。
我在category
上创建了一个可观察的属性true
,当可观察数组中的至少一个menuitem
s具有active
的true
属性时。
(所以category
有一个名为active
的计算属性,当可观察的menuitems数组中的至少一个项目的true
属性设置为active
时,必须是true
)
在active
上的menuitem
财产是一个可观察的boolean
。
现在看来,当它的子(菜单)项上的属性发生更改时,类别上的计算属性不会更改。
我可以看到子(菜单)项的值发生变化,但类别上的计算属性没有(我此时在计算属性中执行控制台日志,而我只是没有记录计算属性得到评估)。
这是设计,还是我在这里做错了...
PS我们使用的是KO版本2.3
答案
或者我在这里做错了什么......
如果你没有显示任何代码,这很难分辨,但看起来确实如此。
这是您描述的行为的实现,它完全符合您的预期。由于您使用的是淘汰赛2.3,因此每次计算出的重新评估时都会看到订阅触发器。请注意,在更高版本的淘汰赛中,只有在值实际发生变化时才会触发。
var Category = function() {
this.menuItems = ko.observableArray([
{ active: ko.observable(false) },
{ active: ko.observable(false) },
{ active: ko.observable(true) },
{ active: ko.observable(false) }
]);
this.active = ko.computed(function() {
return this.menuItems().some(function(subMenu) {
return subMenu.active();
});
}, this);
this.active.subscribe(console.log);
};
ko.applyBindings(new Category());
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/2.3.0/knockout-min.js"></script>
<input type="checkbox" disabled data-bind="checked: active">Parent active
<ul data-bind="foreach: menuItems">
<li>
<label>(active <input type="checkbox" data-bind="checked: active">)</label>
<span data-bind="text: 'Menu ' + $index()"></span>
</li>
</ul>
以上是关于在子集合中的项目内容上创建计算属性的主要内容,如果未能解决你的问题,请参考以下文章