我想知道如何跟踪下面的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;
答案 0 :(得分:1)
在您提供的链接中,他们正在使用fn
创建一个函数,该函数具有获取re-evaluation
计数的计算逻辑
更好的方法是使用在isInitial
下计算的内置函数getDependenciesCount
和computedContext
。
逻辑:
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
的工作示例