Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Почему не работает mapping в Ext.data.Model? (https://javascript.ru/forum/extjs/70896-pochemu-ne-rabotaet-mapping-v-ext-data-model.html)

khusamov 10.10.2017 15:28

Почему не работает mapping в Ext.data.Model?
 
Ext.define('User', {
            extend: 'Ext.data.Model',
            proxy: {
                type: 'memory',
                reader: {
                    type: 'json'
                }
            },
            fields: [
                {mapping: 'ErrorCode', name: 'name',  type: 'string'},
                {name: 'age',   type: 'int', convert: null},
                {name: 'phone', type: 'string'},
                {name: 'alive', type: 'boolean', defaultValue: true, convert: null}
            ]
        });

        var usr = Ext.create('User', {
            ErrorCode: 'test string'
        });

        console.log(
            // expected "test string"
            usr.get('name')
        )


песочница
https://fiddle.sencha.com/#view/editor&fiddle/283k

kolka 12.10.2017 13:33

Могу и ошибаться, по моему, в данном случае нужно создать Store и в него грузить.

Что-то типа:
Ext.define('Episode', {
	extend: 'Ext.data.Model',
	idProperty: 'Id',
	fields: [
		{name: 'AssetId', type: 'int'},
		{name: 'Id', type: 'int'},
		{name: 'Notes', type: 'string'},
		{name: 'Number', type: 'int'},
		{name: 'ProductionNumber', type: 'int'},
		{name: 'SeasonId', mapping: 'Season.Id', type: 'int' },
		{name: 'SeasonName', mapping: 'Season.Name', type: 'string' },
		{name: 'SeasonDesc', mapping: 'Season.Description', type: 'string' },
		{name: 'Title', type: 'string'}
	]
});


var episodeStore = Ext.create('Ext.data.Store', {
	model: 'Episode',
	groupField: 'SeasonName',
	pageSize: 50,
	proxy: {
		type: 'memory',
		reader: {
			type: 'json',
			root: 'Episodes'
		}
	}


var episodeData = {
"Episodes": [{
        "Id": 1,
        "AssetId": 787656,
        "Notes": "My notes",
        "Number": 1,
        "ProductionNumber": "0000000001",
        "Season": {
            "Id": 2,
            "Description": "This is my Season No. 11",
            "Name": "Season 11"
        },
        "SourceSystem": "My System",
        "Title": "Episode Title 1"
    },
    {
        "Id": 2,
        "AssetId": 787656,
        "Notes": "My notes",
        "Number": 2,
        "ProductionNumber": "0000000002",
        "Season": {
            "Id": 3,
            "Description": "This is my Season No. 21",
            "Name": "Season 21"
        },
        "SourceSystem": "My System",
        "Title": "Episode Title 2"
    },
....
    ]
}


и потом
episodeStore.loadData(episodeData);

khusamov 12.10.2017 13:34

Спасибо за подсказку. Способ жутковатый конечно, но похоже работоспособный.


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