ExtJs-> Ext.Store.proxy.writer error: No type specified for writer.create
ExtJs-> Ext.Store.proxy.writer error: No type specified for writer.create
所以我已经从 extjs4 升级到 extjs6,这家商店总是有这个错误:
No type specified for writer.create
此代码有两个用途:
- 用于获取初始页面的数据
- 用于获取单击按钮时的数据。
每当我注释掉 proxy.writer 代码部分时,它都会生成初始页面的数据。
但是每当我不将其注释掉时,它就不会获取初始页面的数据。
每当我点击一个按钮时,它也会 return 这个错误:
Uncaught TypeError: items.slice is not a function
所以我的问题是,自从它更新到 extjs6 后,writer 部分是否有语法错误或其他问题?
P.S。我试图改变
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'
}]
});
是的,您正在以一种可能在 ExtJS 4 中有效的方式使用覆盖,但 AFAIK 不受所有 ExtJS 版本的支持。
您要做的是将自定义编写器定义为新的 class:
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;
}
});
要求您的商店class:
requires: [
'MyApp.app.data.MyCustomJsonWriter'
]
然后通过别名实例化:
writer: {
type: 'mycustomjson'
}
所以我已经从 extjs4 升级到 extjs6,这家商店总是有这个错误:
No type specified for writer.create
此代码有两个用途:
- 用于获取初始页面的数据
- 用于获取单击按钮时的数据。
每当我注释掉 proxy.writer 代码部分时,它都会生成初始页面的数据。 但是每当我不将其注释掉时,它就不会获取初始页面的数据。 每当我点击一个按钮时,它也会 return 这个错误:
Uncaught TypeError: items.slice is not a function
所以我的问题是,自从它更新到 extjs6 后,writer 部分是否有语法错误或其他问题?
P.S。我试图改变
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'
}]
});
是的,您正在以一种可能在 ExtJS 4 中有效的方式使用覆盖,但 AFAIK 不受所有 ExtJS 版本的支持。
您要做的是将自定义编写器定义为新的 class:
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;
}
});
要求您的商店class:
requires: [
'MyApp.app.data.MyCustomJsonWriter'
]
然后通过别名实例化:
writer: {
type: 'mycustomjson'
}