Extjs Store манипулирование полем - PullRequest
0 голосов
/ 22 июля 2011

Я пытаюсь создать магазин, который будет генерировать модель на основе данных с сервера, например, в виде:

{success:true,data:[item1:{},item2{}...]}

Можно ли как-то переписать модель магазина?

Это то, что у меня есть atm:

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();

Кажется, что при загрузке магазина должна быть объявлена ​​модель, поэтому я просто объявляю грубую, с каждым намерением переписатьit.

Теоретически я полагаю, что это может сработать, если сделать обратный вызов для вызова ext.Ajax в качестве функции-конструктора, но я пытаюсь избежать этого.

Ответы [ 3 ]

0 голосов
/ 22 июля 2011

Вы можете определить свой собственный читатель или переопределить метод Reader.read.

Я решил подобную проблему в этой публикации .

0 голосов
/ 22 июля 2011

Это было странно просто.

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();
0 голосов
/ 22 июля 2011

Я задавал похожий вопрос на форумах Сенчи , но у меня нет ответа.

Извините, я не даю вам прямого ответа.

...