我有一个基于KnockoutJS 2.2.1创建的jQuery网格插件。到目前为止一切顺利,但是当插件在元素上初始化时,'计算'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,而这并不会改变我的知识。
我需要确定导致初始化调用负载3次的原因。我知道loadGrid在定义时被调用(b / c deferEvaluation == false),但是我需要找出导致其他两个事件被触发的原因。
所以对于这个问题...... 有什么方法可以追踪导致计算重新评估的事件?
另一方面,我设置deferEvaluation : true
但是当我发出
gridDataModel.gridState.currentPage.valueHasMutated()
计算机不会触发。因此,我甚至可以让计算机工作的唯一方法是deferEvaluation == false
。
谢谢!
答案 0 :(得分:0)
“来源”标签上的Chrome开发者工具可能会有所帮助。只需查看右侧的面板,即可在各种DOM元素上设置断点。
请参阅脚本面板的this overview(现在名为“来源”面板)或this overview of creating breakpoints on DOM events以获取更多帮助。
答案 1 :(得分:0)
我使用knockoutjs chrome插件,我使用KO消息,这样你就可以向控制台显示内容。我过去做过的例子。
self.messages.push(response.msg);