0

如何将变量传递给 extended Ext.tree.Panel,而后者又会将其传递给 custom Ext.data.Store

这是我的代码:

Ext.define('CustomStore', {
    extend: 'Ext.data.TreeStore',
    alias: 'widget.customstore',
    folderSort : true,
    model : 'TreeNode',
    autoLoad: true,
    config: {
        customParam: 'defaultVal'
    },
    ...
    proxy: {
        url: '/some/url?param'+this.customParam,
        ...
    }
});
Ext.define('CustomTree', {
    extend: 'Ext.tree.Panel',
    alias: 'widget.customtree',
    config: {
        customParam2: 'defaultVal'
    },
    store: new CustomStore({customParam: this.customParam2'}),
    ...
});

var tree = Ext.create('CustomTree', {customParam2: 'someVal'});

如您所见,我想将一个值传递someVal给树,它应该将其传递给商店,然后商店的代理需要将其拾取并在其加载 url 中使用。

尝试了很多事情,仅举几例:config, initConfig, constructor,initComponent但没有好的结果。

4

1 回答 1

1

你有正确的成分,但你没有按正确的顺序混合它们。

这里的问题是您的商店创建代码:

new CustomStore({customParam: this.customParam2'})

在定义之前被调用CustomTree

Ext.define('CustomTree', ...)

这是因为new CustomStore(...)用作define函数的参数。因此,很明显,它也在设置值的行之前调用customParam2

var tree = Ext.create('CustomTree', {customParam2: 'someVal'});

所以为了让它工作,你想在CustomTree调用构造函数时创建你的商店。但是在使用组件时,最好重写initComponent而不是构造函数。所以你应该这样做:

Ext.define('CustomTree', {
    extend: 'Ext.tree.Panel',
    alias: 'widget.customtree',
    config: {
        customParam2: 'defaultVal'
    },
    // remove that
    // store: new CustomStore({customParam: this.customParam2'});

    // ... and put it in there:
    initComponent: function() {

        // creates the store after construct
        this.store = new CustomStore({customParam: this.customParam2});

        // call the superclass method *after* we created the store
        this.callParent(arguments);
    }
    ...
});

至于initConfig,您必须在构造函数中调用它才能应用配置参数。但是在您的情况下,您是从Ext.data.Storeand扩展的Ext.tree.Panel,并且它们的构造函数已经调用了它,因此您不必自己做。

于 2013-05-24T14:07:38.397 回答