我正在尝试构建一个基于服务器数据生成模型的商店 例如:
{success:true,data:[item1:{},item2{}...]}
我有什么方法可以写出商店的模型吗?
这就是我的主题:
Ext.define('Tan.data.SimpleStore', {
extend: 'Ext.data.Store',
constructor: function (config) { //Not initComponent, thx for wasting an hour...
config=this.config||{};
Ext.define('Users', { //ext base example model.
extend: 'Ext.data.Model',
fields: [
{name: 'id', type: 'string'},
]
});
config.proxy= {
type: 'ajax',
url : 'server.php?c=testFunction',
reader: {
type: 'json',
root: 'data'
}//Example return: {"success":true,"data":["0":1,"2":1,"3":1,"4":1]}
}
config.model='Users';//Store breaks without this :((
this.callParent([config]); //Proto It
this.load({ // watch for the load event and then manipulate
// ( or try to atleast ) the fields
callback: function(records,operation,success){
// As expected obj is correct
var obj=Ext.decode(operation.response.responseText);
//K now wtf. Have the data but....
Ext.ModelManager.unregister(this.config.model);
Ext.define(this.config.model, {
extend: 'Ext.data.Model'
,fields: Ext.Object.getKeys(obj.data)
,url : 'server.php?c=testFunction'
,reader: {
type: 'json',
root: 'data'
}
});//yay you over wrote the model, but meh, nothing
console.log(this); //Bleh 0 items in store.data
}
});
}
});
var s= Ext.create('Tan.data.SimpleStore');
s.load();
似乎必须在加载商店时声明一个模型,所以我只是声明一个crud一个,只是打算过度编写它。
从理论上讲,我认为它可以通过在ext.Ajax调用上作为构造函数进行回调来实现,但我试图避免它。
答案 0 :(得分:0)
您可以定义自己的阅读器或覆盖Reader.read
方法。
我已经解决了post中的类似问题。
答案 1 :(得分:0)
这很奇怪。
this.add({key:'value});
注册该字段。
Ext.define('Tan.data.SimpleStore', {
extend: 'Ext.data.Store',
constructor: function (config) {
config=this.config||{};
Ext.define('Users', {
extend: 'Ext.data.Model',
fields: [
]
});
config.proxy= {
type: 'ajax',
url : 'server.php',
reader: {
type: 'json',
root: 'users'
}
}
config.model='Users';
this.callParent([config]);
this.load({
callback: function(records,operation,success){
var obj=Ext.decode(operation.response.responseText);
this.add({data:obj}) //this is the magic
console.log(this.getRange());
console.log(this.max('data'));//yay it logs my array, looks like the handlers are in place
}
});
}
});
var s= Ext.create('Tan.data.SimpleStore');
s.load();
答案 2 :(得分:-1)
我在Sencha's forums中问了一个类似的问题,但我没有回复。
抱歉,我没有直接给你答复。