knockout.js 追踪淘汰事件

whitzsjs  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(138)

我有一个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

zujrkrfu

zujrkrfu1#

Chrome开发者工具中的“源代码”选项卡可能会有所帮助。请查看右侧的面板,它可以让您在各种DOM元素上设置断点。
有关更多帮助,请参见脚本面板(现在命名为“源”面板)的this overview或有关在DOM事件上创建断点的概述。

bzzcjhmw

bzzcjhmw2#

我使用knockoutjs chrome插件,我使用KO的消息,这样你就可以在控制台上显示东西了。

self.messages.push(response.msg);

相关问题