追踪淘汰赛事

时间:2013-02-15 20:29:40

标签: javascript javascript-events knockout.js knockout-2.0

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

谢谢!

2 个答案:

答案 0 :(得分:0)

“来源”标签上的Chrome开发者工具可能会有所帮助。只需查看右侧的面板,即可在各种DOM元素上设置断点。

请参阅脚本面板的this overview(现在名为“来源”面板)或this overview of creating breakpoints on DOM events以获取更多帮助。

答案 1 :(得分:0)

我使用knockoutjs chrome插件,我使用KO消息,这样你就可以向控制台显示内容。我过去做过的例子。

self.messages.push(response.msg);