Javascript ExtJS存储添加调用创建和销毁
这是一个调用四个php文件来执行CRUD的存储,以及一些侦听器来处理重复名称Javascript ExtJS存储添加调用创建和销毁,javascript,extjs,Javascript,Extjs,这是一个调用四个php文件来执行CRUD的存储,以及一些侦听器来处理重复名称 this.store = Ext.create('Ext.data.Store', { fields: [ 'id', 'name', 'Address', 'status',
this.store = Ext.create('Ext.data.Store', {
fields: [
'id',
'name',
'Address',
'status',
],
autoLoad: auto,
autoSync: auto,
remoteSort: true,
proxy: {
type: 'ajax',
api: {
create: '../../create.php',
read: '../../read.php',
destroy: '../../destroy.php',
update: '../../update.php'
},
reader: {
type: 'json',
root: '__data',
totalProperty: 'grandTotal'
},
writer: {
type: 'json',
root: '__data'
},
listeners: {
exception: function( t, response, op ) {
var _da = Ext.decode( response.responseText );
if( _da ) {
if( _da.message == "ExistingName" ) {
_da.message = Locale.gettext('name already exists');
} else {
frm = _self.subnetEditor.down('form');
name_field = frm.down('textfield[name=name]');
}
name_field.markInvalid(Locale.gettext(_da.message));
}
showMsg( _da.success, _da.message );
if( op.action == 'create' || op.action == 'update' ) {
_self.store.rejectChanges();
_self.store.load();
}
}
}
}
}
});
下面是删除功能将删除所选项目,我有store.add(项目)来添加记录。但问题是,如果我运行remove函数,然后store.add添加任何项目,store.add将同时启动create和destroy。第二次销毁将在我第一次运行remove函数时发布准确的数据。
我想store.add只会在代理中调用create api,但是为什么会调用destroy呢
我看到remove抛出了一个异常。如果抛出异常,是否意味着删除操作仍处于挂起状态?所以它会将添加和删除一起批处理?这不是由ExtJS引起的,它会导致服务器响应“[null]”。null数组被视为异常,我想异常会导致请求挂起。请记住,sync()会将存储区中所有挂起的操作批处理在一起。因此,如果您添加了2条记录,删除了1条记录,并更新了3条记录,那么调用sync()将对这些记录进行批处理together@existdissolve调用remove之后,autosync不应该执行remove吗?如果是这样的话,我会在删除之后添加,应该只剩下一个添加操作了。在我的例子中,我运行1 remove,然后运行1 add,我看到它在remove上调用destroy,在add上调用create和destroy。将请求发送到服务器时是否发生错误?您可以发布执行add()位的代码吗?是的,remove操作总是抛出一个异常:“{”\uuuu data:[null],“success”:true,“message:“remove successful”,“total”:1}”,这会导致它挂起吗?奇怪的是,我的PHP在删除时没有返回任何内容,但它得到了“[null]”。准确地说,这是一个第一个元素等于null的数组。它可能会造成大破坏,因为它不是预期的数据。@Thevs我认为你是对的。为了满足我的好奇心,“浩劫”是什么意思?我的意思是它不是以您的
字段
属性的格式。“大破坏”只是指程序的任何意外行为:)
removeSelected: function() {
var _self = this;
Ext.Msg.show( {
title: Locale.gettext( 'Remove selected?' ),
msg: Locale.gettext( 'Are you sure you want to remove ALL SELECTED items?' ),
icon: Ext.Msg.WARNING,
buttons: Ext.Msg.OKCANCEL,
buttonAlign: 'right',
fn: function( button ) {
if( button == 'ok' ) {
var grid = _self.down( 'grid' );
if( grid ) {
var selection = grid.getSelectionModel().getSelection();
if( selection.length ) {
_self.store.remove( selection );
if( _self.useGridRowEditing ) {
_self.store.sync();
}
}
}
}
}
} );
}