Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   store extend (https://javascript.ru/forum/extjs/42799-store-extend.html)

skrudjmakdak 10.11.2013 14:47

store extend
 
Вот такая проблема. Я хочу создать свой класс унаследовав его от store. прописываю вот так:

Ext.define("Ext.data.Store2",
    {
    extend: 'Ext.data.Store',
    idProperty: 'id',
    remoteSort: true,
    proxy:
        {
        type: 'ajax',
        actionMethods:
            {
            read: 'POST'
            },
        reader:
            {
            root: 'data',
            totalProperty: 'totalCount'
            },
        simpleSortMode: true
        },
    sorters: [
        {
        property: 'id',
        direction: 'ASC'
        }],
    
    constructor: function(config)
        {
        this.proxy.url = config.url;
        Ext.data.Store2.superclass.constructor.call(this, config);
        }
    });




Теперь создаем 2 экземпляра класса:

var store1 = Ext.create("Ext.data.Store2",
    {
    pageSize: 20,
    fields: ['id', 'name'],
    url: 'data1.php',
    autoLoad: true,
    listeners:
        {
        load:
            {
            fn: function()
                {
                console.log(this.model.modelName);
                console.log(this.data.items[0].id);
                console.log(this.data.items[0].data);
                }
            }
        }
    });


var store2 = Ext.create("Ext.data.Store2",
    {
    pageSize: 20,
    fields: ['id', 'datetime_create'],
    url: 'data2.php',
    autoLoad: true,
    listeners:
        {
        load:
            {
            fn: function()
                {
                console.log(this.model.modelName);
                console.log(this.data.items[0].id);
                console.log(this.data.items[0].data);
                }
            }
        }
    });



после загрузки сторов в консоль выводятся данные. но выводятся не так как надо.
во втором сторе поля почемуто берутся из первой. вот то что вывелось:

Ext.data.Store.ImplicitModel-ext-gen1022
Ext.data.Store.ImplicitModel-ext-gen1021-1
Object {id: "1", name: ""}

Ext.data.Store.ImplicitModel-ext-gen1021
Ext.data.Store.ImplicitModel-ext-gen1021-1
Object {id: "1", name: "google"}

вот во втором варианте мы видим поля id, name. хотя должно быть id, datetime_create
подскажите как правильно прописать класс.

Ex_Soft 12.11.2013 00:35

Цитата:

Сообщение от skrudjmakdak (Сообщение 280326)
подскажите как правильно прописать класс.

Ext.data.ArrayStore.constructor
constructor: function(config) {
        config = Ext.apply({
            proxy: {
                type: 'memory',
                reader: 'array'
            }
        }, config);
        this.callParent([config]);
    },

skrudjmakdak 12.11.2013 13:45

ага, понял.. позже попробую

skrudjmakdak 12.11.2013 15:48

писибки. вот что получилось:

вот сам класс
Ext.define("Ext.data.Store2",
	{
	extend: 'Ext.data.Store',
	idProperty: 'id',
	remoteSort: true,
	sorters: [
		{
		property: 'id',
		direction: 'ASC'
		}],
	
	constructor: function(config)
		{
		//config = Ext.apply(
		config = Ext.Object.merge(
			{
			proxy:
				{
				type: 'ajax',
				url: config.url,
				actionMethods:
					{
					read: 'POST'
					},
				reader:
					{
					root: 'data',
					totalProperty: 'totalCount'
					},
				simpleSortMode: true
				}
			}, config);
		//console.log(config);
		this.callParent([config]);
		}
	});


и вот сами сторы:
var store11 = Ext.create('Ext.data.Store2',
	{
	pageSize: 20,
	fields: ['id', 'name'],
	url: 'theme.get.php',
	autoLoad: true
	});


var store22 = Ext.create('Ext.data.Store2',
	{
	pageSize: 20,
	fields: ['id', 'en'],
	url: 'word.get.php',
	proxy:
		{
		extraParams:
			{
			theme_id: 1
			}
		},
	autoLoad: true
	});

siber-biber 13.11.2013 10:44

ждем продолжения когда вы обнаружите что sorters у вас тоже общий между всеми экземплярами класса ;)


Часовой пояс GMT +3, время: 11:28.