我有一个商店的消息,它工作正常。
现在我需要相同的商店,但初始化程度不同,所以我想重复使用它。
之前:
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。
关于什么是错的任何想法?做同样的事情使网格可重用工作正常,但与商店失败。
答案 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编程和类继承的人,从未使用过通过克隆工作的原型样式继承。