首页 > 解决方案 > Bryntum 看板任务单击时出现空选择错误

问题描述

我正在将 Bryntum 看板板集成到 EXTJS 应用程序中。在看板的顶部工具栏中,我有一个 ExtJS 组合框,它可以更改视图,以便用户可以查看他们的私人任务板以及他们的组的任务板。(用户可以在多个组中)当视图更改时,填充任务板列的状态存储和填充用户选择器的用户存储以及任务存储都需要重新加载。问题是视图改变后,点击一个任务会抛出两个错误:

Uncaught TypeError: can't access property "getRange", this.selected is null
    ExtJS 2
    relayMethod http://dev.southern-air.com/javascript/taskboard/taskboard-all-debug.js:6471
    map ExtJS
    relayMethod http://dev.southern-air.com/javascript/taskboard/taskboard-all-debug.js:6470
    deselectAll http://dev.southern-air.com/javascript/taskboard/taskboard-all-debug.js:6446
    deselectAll http://dev.southern-air.com/javascript/taskboard/taskboard-all-debug.js:7431
    onDragStarting http://dev.southern-air.com/javascript/taskboard/taskboard-all-debug.js:7532
    ExtJS 4
    getDragData http://dev.southern-air.com/javascript/taskboard/taskboard-all-debug.js:4896
    ExtJS 86
ext-all-debug.js:200495:9

Uncaught TypeError: can't access property "getRange", this.selected is null
    ExtJS 2
    deselectAllInOtherSelectionModels http://dev.southern-air.com/javascript/taskboard/taskboard-all-debug.js:6465
    each ExtJS
    forEachSelModel http://dev.southern-air.com/javascript/taskboard/taskboard-all-debug.js:6475
    deselectAllInOtherSelectionModels http://dev.southern-air.com/javascript/taskboard/taskboard-all-debug.js:6464
    deselectAllInOtherViews http://dev.southern-air.com/javascript/taskboard/taskboard-all-debug.js:7385
    onTaskClick http://dev.southern-air.com/javascript/taskboard/taskboard-all-debug.js:7381
    ExtJS 2
ext-all-debug.js:200495:9

这是组合框上更改侦听器的代码:

change: function (field, newValue) {
    var ts = Ext.data.StoreManager.lookup('taskstore');
    var ss = Ext.data.StoreManager.lookup('statestore');
    var us = Ext.data.StoreManager.lookup('userstore');
    var taskboard = field.up('mytaskboard');
    console.log(taskboard);
    ts.getProxy().setExtraParam('view', newValue);
    ss.getProxy().setExtraParam('view', newValue);
    us.getProxy().setExtraParam('view', newValue);
    taskboard.deselectAll();
    ss.reload({
        callback: function () {
            // taskboard.deselectAll();
            taskboard.refresh();
            us.reload({
                callback: function () {
                    taskboard.userMenu.picker.refresh();
                    ts.reload({
                        callback: function () {
                            console.log(taskboard);
                        }
                    });
                }
            });
        }
    });
}

在重新加载商店之前我需要做些什么以确保不会引发此错误吗?如果有人也遇到过这个问题,我会很感激你的解决方案。正如您在上面的代码中所见,我曾尝试在重新加载之前取消选择所有选项,但这也无济于事。

标签: extjsextjs7

解决方案


故障排除后,我找到了一个似乎有效的解决方案。在重新加载商店之前,我必须将以下行添加到更改侦听器:

delete field.up('mytaskboard').selModel;

这一行从任务板中删除了所有选择模型,这些模型最初是导致问题的原因。现在视图发生了变化,一切都按预期工作。我仍然很想知道这是否会导致其他问题。


推荐阅读