我有一个jQuery网格插件,我正在基于KnockoutJS 2.2.1创建。到目前为止,它沿着顺利,但当插件在一个元素上初始化时,“计算”loadGrid
方法调用了3次。
为了简单起见,我将包括loadGrid
方法和一些其他相关代码。(实际的插件相当大,所以为了简洁起见,我只包括了插件的一部分)
function GridDataModel() {
var self = this;
self.gridState = {
currentPage: ko.observable(opts.gridState.currentPage),
pageSize: ko.observable(opts.gridState.pageSize),
totalPages: ko.observable(opts.gridState.totalPages),
orderBy: ko.observable(opts.gridState.orderBy),
};
self.loadGrid = ko.computed({
read: function () {
console.log('load grid');
if (opts.dataUrl != '') {
var requestData = self.gridState;
if (self.columns.length == 0) requestData.needColumns = true;
$.getJSON(opts.dataUrl, requestData, function (data, textStatus, jqXHR) {
self.loadData(data);
});
}
},
owner: this,
deferEvaluation: false
});
}
gridDataModel = new GridDataModel();
ko.applyBindings(gridDataModel);
请注意,这个计算的唯一依赖项是self.gridState,它在我的知识中没有变化。
我需要确定是什么原因导致初始化调用load 3次。我知道loadGrid在定义时被调用(B/c deferEvaluation == false),但我需要找出是什么原因导致其他两个事件触发。
因此,对于这个问题...有什么方法可以跟踪哪些事件导致计算的重新求值?
另一方面,我设置了deferEvaluation : true
,但是当我发出
gridDataModel.gridState.currentPage.valueHasMutated()
计算的不会触发。所以我甚至可以让计算的工作的唯一方法是如果deferEvaluation == false
。
2条答案
按热度按时间zujrkrfu1#
Chrome开发者工具中的“源代码”选项卡可能会有所帮助。请查看右侧的面板,它可以让您在各种DOM元素上设置断点。
有关更多帮助,请参见脚本面板(现在命名为“源”面板)的this overview或有关在DOM事件上创建断点的概述。
bzzcjhmw2#
我使用knockoutjs chrome插件,我使用KO的消息,这样你就可以在控制台上显示东西了。