ExtJs-> Ext.Store.proxy.writer ошибка: не указан тип для writer.create - PullRequest
0 голосов
/ 17 мая 2018

Итак, я обновился с extjs4 до extjs6, и в этом магазине всегда есть эта ошибка:

Не указан тип для writer.create

Этот код имеет два применения:

  1. Для получения данных для начальной страницы
  2. Для получения данных для каждого нажатия кнопки.

Всякий раз, когда я комментирую прокси.Часть кода, предназначенная для записи, будет производить данные для начальной страницы.Но всякий раз, когда я не буду комментировать это, он не получит данные для начальной страницы.И это также будет возвращать эту ошибку всякий раз, когда я нажимаю кнопку:

Uncaught TypeError: items.slice не является функцией

Так что мой вопрос, является ли часть писателяу вас неправильный синтаксис или что-то еще, поскольку он обновлен до extjs6?

PS Я попытался изменить this.callOverridden на this.callParent, так как в нем говорится, что this.callOverridden уже устарел, но все еще имеет ту же ошибку.

Ext.define('Stm.store.stmpdate', {
extend: 'Extends.data.Store',

requires: [
    'Cstm.Setting',
    'Stm.model.stmpdate'
],

model: 'Stm.model.stmpdate',

pageSize: Stm.Const.controller.dataCountLimit,
remoteSort: true,
proxy: {
    type: 'ajax',
    url: Cstm.Setting.getEntryUrl() + '/stm/stm-update/stm-update',
    reader: {
        type: 'json',
        rootProperty: 'data'
    },
    writer: Ext.data.writer.Json.override({
        getRecordData: function() {
            var data = this.callOverridden(arguments);

            var record = arguments[0];

            if ( record.associations.length > 0 ) {
                Ext.Array.each(record.associations.keys, function(key) {
                    data[key] = [];

                    var assocStore = record[key]();

                    Ext.Array.each(assocStore.data.items, function(assocItem) {
                        data[key].push(assocItem.data);
                    });
                });
            }
            return data;
        }
    }),
    api: {
        create: Cstm.Setting.getEntryUrl() + '/stm/stm-update/application',
        update: Cstm.Setting.getEntryUrl() + '/stm/stm-update/approval'
    },
    actionMethods: {
        create: 'POST',
        read: 'POST',
        update: 'POST',
        destroy: 'POST'
    }
},

sorters: [
    {property: 'aplDatetime', direction: 'DESC'},
    {property: 'siteDomain', direction: 'ASC'},
    {property: 'pageName', direction: 'ASC'}
]

});

Модель:

Ext.define('Stm.model.stmpdate', {
extend: 'Ext.data.Model',
fields: [
    {name: 'siteId', type: 'integer'},
    {name: 'siteName', type: 'string'},
    {name: 'siteUrl', type: 'string'},
    {name: 'tmpId', type: 'integer', defaultValue: 1},
    {name: 'updType', type: 'string'}
],

hasMany: [{
    model: 'Stm.model.ServerInfo',
    name: 'servers',
    associationKey: 'servers',
    reference: 'tmpId'
}]

});

1 Ответ

0 голосов
/ 17 мая 2018

Да, вы используете переопределение таким образом, который мог бы работать в ExtJS 4, но AFAIK не поддерживается во всех версиях ExtJS.

Что вы хотите сделать, это определить свой пользовательский модуль записи как новый класс:

Ext.define('MyApp.app.data.MyCustomJsonWriter', {
    extend: 'Ext.data.writer.Json',
    alias: 'writer.mycustomjson',
    getRecordData: function() {
        var data = this.callParent(arguments);

        var record = arguments[0];

        if ( record.associations.length > 0 ) {
            Ext.Array.each(record.associations.keys, function(key) {
                data[key] = [];

                var assocStore = record[key]();

                Ext.Array.each(assocStore.data.items, function(assocItem) {
                    data[key].push(assocItem.data);
                });
            });
        }
        return data;
    }
});

требует, чтобы этот класс из вашего магазина:

requires: [
    'MyApp.app.data.MyCustomJsonWriter'
]

, а затем создал его псевдоним:

writer: {
    type: 'mycustomjson'
}
...