存储创建工作,存储定义不

时间:2013-12-14 23:07:15

标签: javascript extjs extjs4 extjs4.2

我有一个商店的消息,它工作正常。

现在我需要相同的商店,但初始化程度不同,所以我想重复使用它。

之前:

Ext.create('Ext.data.JsonStore', {
    model: 'my.MessageModel',
    storeId: 'importantStore',
    autoLoad: true,
    proxy: {
        type: 'ajax',

        url: 'ajax/ajAsProof.php',
        actionMethods: {
            read: 'POST'
        },
        reader: {
            type: 'json',
            root: 'messages',
            idProperty: 'id'
        },
        writer: {
            type: 'json',
            writeAllFields: true,
            allowSingle: false,
            encode: true,
            root: 'messages'
        }
    },
    ...
}

Ext.define('my.MessagesGrid', {
    extend: 'Ext.grid.Panel',
    store: 'myGrid',
    ...
}
Ext.create('my.MessageGrid', {
    store:'importantStore',
    renderTo: 'myGridId'
});

之后:

Ext.define('my.ImportantStore', {
    extend: 'Ext.data.JsonStore',
    model: 'my.MessageModel',
    autoLoad: true,
    proxy: {
        type: 'ajax',

        url: 'ajax/ajAsProof.php',
        actionMethods: {
            read: 'POST'
        },
        reader: {
            type: 'json',
            root: 'messages',
            idProperty: 'id'
        },
        writer: {
            type: 'json',
            writeAllFields: true,
            allowSingle: false,
            encode: true,
            root: 'messages'
        }
    },
    ...
}
Ext.define('my.MessagesGrid', {
    extend: 'Ext.grid.Panel',
    store: 'myGrid',
    ...
}

var importantStore = Ext.create('my.ImportantStore', {
    storeId: 'importantStore',
    ... // my custom settings to come here, like filters or parameters
});
Ext.create('my.MessageGrid', {
    store:'importantStore',
    renderTo: 'myGridId'
});

这失败了。 Firefox / Firebug给了我一个

  

TypeError:url未定义ext-all-debug.js(第14429行)

     

这个。$ cache = dom.id? Ext.cache [dom.id]:null;

所有在Ext.ready()调用中的同一个js文件中定义。使用ExtJS 4.2.1.883。

关于什么是错的任何想法?做同样的事情使网格可重用工作正常,但与商店失败。

2 个答案:

答案 0 :(得分:0)

  

“网址未定义”

您是否真的在商店的网址配置中加入了一些价值?

Ext.define('my.ImportantStore', {
    extend: 'Ext.data.JsonStore',
    model: 'my.MessageModel',
    autoLoad: true,
    url: '../myServletOrRestService'  // do you have this config ?

    ...
}

答案 1 :(得分:0)

经过几天寻找答复后,我得到了解决方案,主要是巧合......来自C#背景我不知道ExtJS和JavaScript附带的原型恐怖。

Ext.define('my.ImportantStore', {
    extend: 'Ext.data.JsonStore',
    model: 'my.MessageModel',
    autoLoad: true,
    constructor: function(config) {
        config = config || {};

        this.initConfig(config);
        this.proxy = Ext.create('Ext.data.proxy.Ajax', {
            extraParams: config.extraParams
            // other config
        });
        ...
        this.callParent(arguments);
    }
});

Ext.create('my.ImportantStore', {
    storeId: 'importantStore',
    extraParams: {
        ...
    }
});

如果组件(在本例中为代理)未在容器中创建,则在使用Ext.define时,代理(或该案例的设置)将在所有实例上共享,这对于人们来说是直观的熟悉OOP编程和类继承的人,从未使用过通过克隆工作的原型样式继承。