Javascript函数说明 - Knockout.js

时间:2016-07-20 20:00:40

标签: javascript jquery knockout.js

前几天我问了一个问题(here)。有人回答说,他们的回答符合我的意图。但是,有一些我不理解的代码,我希望有人可以帮助我。

   self.currentlySelected = ko.computed(function() {
     return self.topics().reduce(function(count, topic) {
      return count + (topic.selected() ? 1 : 0);
     }, 0);
   });

有人会善意地解释这个功能在做什么吗?谢谢!

3 个答案:

答案 0 :(得分:2)

它表示currentlySelected是一个计算属性 - 要查看它的值,你必须评估一个函数。

该功能说:

1.  Get the topics
2.  Reduce the topics down to a single value, using the following function
3.  If the topic is selected, add 1 to our running total (count).
    Otherwise, add 0.  Our initial value for count is 0.

答案 1 :(得分:1)

它在您的主题列表中使用reduce方法,它遍历主题可观察数组中的每个项目,检查它是否被选中,然后添加所有这些项目。它看起来也像这样:

self.currentlySelected = ko.computed(function() {
  var count = 0
  for(var i = 0; i < self.topics().length; i++){
    var topic = self.topics()[i]
    if(topic.selected()){
      count += 1;
    }
  }
  return count
});
<。> .reduce方法是原生的Javascript方法,可以找到更多Here

.computed方法是knockout.js,很好地解释Here

答案 2 :(得分:1)

让我们从内到外

self.topics().reduce(/* code... */, 0) - 这是在self.topics中存储的数组上调用Array.prototype.reduce()。此函数适用于集合并将其缩减为单个值 - 在本例中为count + (topic.selected() ? 1 : 0),因此它返回所选主题的计数。最后一部分,即计数代码self.topics().reduce(/* code... */, 0)之后的最后一个零,是计数的初始值。因此,它从零开始,计算每个选定的主题,返回结果。

ko.computed(function() { /* reduction code */ });正在创建一个computed observable Knockout observable,如果其依赖的任何可观察对象发生变化,则会自动更改。在这种情况下,这是self.topics - 对它们的任何更改(如添加/删除它们)都会导致self.currentlySelected重新计算,因此它将始终显示...当前选定的项目。他们的数量更具体。