重新配置网格

时间:2017-05-18 08:14:24

标签: javascript extjs

我在应用程序中有一个网格。一切顺利。然后,我想更改网格以使用保存配置中的不同列。这也很好 - 除非我先在列上打开一个过滤器菜单。在此之后,更改列布局会在重新配置功能中导致内部错误,其中焦点将重新应用于网格。以下是Ext.view.Table类中发生错误的代码:

    onFocusEnter: function(e) {
    var me = this,
        fromComponent = e.fromComponent,
        navigationModel = me.getNavigationModel(),
        focusPosition,
        br = me.bufferedRenderer,
        focusRecord, focusRowIdx, focusTarget, scroller;
    // Focusing an internal focusable while TD navigation is disabled;
    // We do not intervene.
    if (me.actionableMode) {
        return;
    }
    // The underlying DOM event
    e = e.event;
    // We can only focus if there are rows in the row cache to focus *and* records
    // in the store to back them. Buffered Stores can produce a state where
    // the view is not cleared on the leading end of a reload operation, but the
    // store can be empty.
    if (!me.cellFocused && me.all.getCount() && me.dataSource.getCount()) {

问题是me.dataSource为null。我发现这很奇怪,因为在此行之前的注释确定了使用缓冲存储时空存储的潜在问题 - 我是 - 并且对此没有任何作用。

我肯定在重新配置功能中提供了一个有效的存储,因为除非首先显示过滤器菜单,否则它可以正常工作。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我进一步研究了这个,并检查了为什么dataSource值应为null。在调用堆栈中,我们通过Ext.util.StoreHolder类来绑定存储。这包括将商店绑定到侦听器然后引发事件以让系统​​对更改做出反应的代码。

    bindStore: function(store, initial, propertyName) {
    ...
    if (store !== oldStore) {
        if (oldStore) {
            ... lines to unbind the old store
        }
        if (store) {
            me[propertyName] = store = Ext.data.StoreManager.lookup(store);
            me.bindStoreListeners(store);
            me.onBindStore(store, oldStore);
        } else {
            me[propertyName] = null;

它在onStindStore中发生错误。我在它之前添加了代码来从源设置dataSource并且错误消失了。

虽然它有效,但我有点犹豫不决,因为它正在改变真正的ExtJs代码。如果您能想出更好的答案,请分享。