跟踪淘汰赛中的评估数量

时间:2015-10-24 06:36:40

标签: javascript knockout.js

我想知道如何跟踪下面的GetArray1()和GetArray2()的knockout observable数组中的评估数量。 我已经阅读了这个fiddle link的样本,但不知道如何适应这种情况。



var data1 = [{
    "Hours": 1
}, {
    "Hours": 2
}, {
    "Hours": 3
}];


function ViewModel() {
    var self = this;
    self.sampleArray = ko.observableArray([]);
  
   var newData = ko.mapping.fromJS(data1)();
    self.GetArray = function() {
       ko.utils.arrayForEach(newData, function (item) {
          self.sampleArray.push(item) //push here
       });
    }
    
    self.GetArray2 = function() {
       $.each(newData, function (index, value) {
          self.sampleArray.push(value) //push here
       });
    }
    
    self.GetArray();
  self.GetArray2();
}
ko.applyBindings(new ViewModel())

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout.mapping/2.4.1/knockout.mapping.min.js"></script>

<div data-bind="foreach:sampleArray">
    <p data-bind="text:Hours"></p>
    <br/>
</div>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

在您提供的链接中,他们正在使用fn创建一个函数,该函数具有获取re-evaluation计数的计算逻辑

更好的方法是使用在isInitial下计算的内置函数getDependenciesCountcomputedContext

逻辑:

 ko.computed(function () {
     var subscribe = self.sampleArray(); //declared on top to subscribe initially
     if (ko.computedContext.isInitial()) return true;
     var count = ko.computedContext.getDependenciesCount();
     self.revaluationCount(self.revaluationCount() + count);
 });

根据文档:

  

isInitial() - 在第一个函数中调用时返回true的函数   曾经评估当前计算的可观察量,或者是假的   除此以外。对于纯计算的observable,isInitial()始终是   未定义。

     

getDependenciesCount() - 返回的依赖项数   到目前为止在当前评估期间检测到的计算可观察量。

点击此处查看完整 documentation

包含完整代码 here

的工作示例