Extjs 4.2.1-配置自动加载:false失败

Extjs 4.2.1-配置自动加载:false失败,extjs,extjs4,extjs4.2,Extjs,Extjs4,Extjs4.2,我定义了一个treepanelextendextend:'Ext.tree.Panel',它具有initComponent函数,如 Ext.define('Example', { extend: 'Ext.tree.Panel', title: 'Example', useArrows:false, rootVisible: false, border: false, initComponent: function () { v

我定义了一个
treepanel
extend
extend:'Ext.tree.Panel'
,它具有initComponent函数,如

 Ext.define('Example', {
    extend: 'Ext.tree.Panel',
    title: 'Example',
    useArrows:false, 
    rootVisible: false,
    border: false,
    initComponent: function () {
        var store = Ext.create('Ext.data.TreeStore', {
            fields: [
                {name: 'id',     type: 'string'},
                {name: 'text',     type: 'string'}
            ],
            autoLoad : false, // not working
            proxy: {
                type: 'ajax',
                url: 'data.php',
                reader: {
                    type: 'json',
                    root: 'results'     
                }
            }

        });
        this.store = store;
        this.callParent(arguments);
    }
 });
我尝试设置
autoLoad:false
,但在创建
treepanel

当我尝试配置下面的代码来存储时,然后
自动加载:false
工作,但加载后我的
treepanel
为空

                root: {
                    text: 'Ext JS',
                    id: 'src',
                    expanded: false // this 
                }
如果不使用
root
config-like,我的json很好,并且可以正常工作

({  "results": [
    { 
        id : '1' , 
        text : '1', 
        expanded: true, 
        results :[{ 
            id : '2' , 
            text : '2', 
            leaf:true
        }]
    },{ 
        id : '3' , 
        text : '3', 
        leaf:true
    }] 
})

如何修复此问题,谢谢。

您必须覆盖
Ext.tree.Panel.setRootNode
metod以考虑商店的
自动加载属性

下面的示例使用ExtJS v4.2.2进行测试

Ext.define('Example', {
    extend: 'Ext.tree.Panel',
    title: 'Example',
    useArrows:false,
    rootVisible: false,
    border: false,

    /**
     * Override.
     */
    setRootNode: function() {
        if (this.getStore().autoLoad) {
            this.callParent(arguments);
        }
    },

    initComponent: function () {
        var store = Ext.create('Ext.data.TreeStore', {
            fields: [
                {name: 'id',     type: 'string'},
                {name: 'text',     type: 'string'}
            ],
            autoLoad : false,
            proxy: {
                type: 'ajax',
                url: '/data.php',
                reader: {
                    type: 'json',
                    root: 'results'
                }
            }

        });
        this.store = store;
        this.callParent(arguments);
    }
});

Ext.onReady(function(){

    var tree = Ext.create('Example', {
        renderTo: Ext.getBody(),
        width: 300,
        height: 300
    });

    tree.getStore().load();
});

老实说,你可能只是在找queryMode:“本地”,我不是100%的,它对这个有用,但我会这么做

我一直在组合框上使用它,它强制本地商店管理(关闭自动加载)

我不知道为什么“自动加载:false;”不起作用。 但是您可以阻止自动加载为在treepanel中添加'root'配置。不是在树顶。 而且load()工作正常

{
    xtype: 'treepanel',

    .....

    root: {
        loaded: true;
    }
}
这会奏效的

var myTreeStore = Ext.create('Ext.data.TreeStore', {
    fields: [ ... ],

    proxy: { ... },

    root: {
        loaded: true;
    }
});
这是行不通的


祝你好运。

自动加载属性仅绑定到存储本身。我猜在你的例子中,一个组件触发了负载。如果您想要完全控制,您可以使用
beforeload
事件检查每个加载,如果
无效则返回false
@sra如何检查
无效
,您的意思是什么?但是为什么我的代码失败,
自动加载:false
不起作用:(请参阅文档以了解注意,如果
true
,则存储将在创建后加载。只创建没有树面板的存储,您将看到您的存储在创建后不会加载。@sra如果在加载前使用
我想这很难捕捉。我使用
根:{results:[]}
store
中,然后
自动加载:false
工作,但当我
load()时
my
treepanel
为空?这是4.2.2中的错误吗?这在4.1.1中没有发生me@HDave似乎是这样。表和树的视图进行了轻微的重构。是的,这很有效。在我看来,这是一个奇怪的副作用或错误?。最后,我将相同的数据发送到存储区。在Extjs 5.1.0中对此进行了测试。