Extjs Store字段操作

时间:2011-07-21 20:06:57

标签: extjs store

我正在尝试构建一个基于服务器数据生成模型的商店 例如:

{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调用上作为构造函数进行回调来实现,但我试图避免它。

3 个答案:

答案 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中问了一个类似的问题,但我没有回复。

抱歉,我没有直接给你答复。