【问题标题】:track number of evaluations in knockout跟踪淘汰赛中的评估次数
【发布时间】:2015-10-24 15:31:09
【问题描述】:

我想知道如何在下面的 GetArray1() 和 GetArray2() 的敲除可观察数组中跟踪评估次数。 我已经阅读了来自 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>

【问题讨论】:

  • 您想跟踪评估sampleArray 的次数吗?只有计算的属性会被自动评估。你没有计算属性,
  • 您拥有的链接中的所有内容。工作样本在这里jsfiddle.net/nejdqktq/6让我们知道
  • @supercool 谢谢知道了 :)

标签: javascript knockout.js


【解决方案1】:

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

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

逻辑:

 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 的评估,或者错误 否则。对于纯计算的 observables,isInitial() 总是 未定义。

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

在此处查看完整的documentation

带有完整代码的工作示例here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 2013-01-31
    • 2012-03-20
    • 2012-11-21
    • 1970-01-01
    • 2013-04-10
    相关资源
    最近更新 更多