ExtJS 存储添加调用创建和销毁
Posted
技术标签:
【中文标题】ExtJS 存储添加调用创建和销毁【英文标题】:ExtJS store add calls both create and destroy 【发布时间】:2014-10-15 17:52:46 【问题描述】: 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();
);
这是调用四个php文件做CRUD的store,还有一些监听器来处理重名。
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();
);
这里是删除功能将删除选定的项目,我有 store.add(item) 来添加记录。但问题是如果我运行 remove 函数,然后 store.add 添加任何项目,store.add 将同时触发 create 和 destroy。当我第一次运行删除功能时,第二次销毁将发布准确的数据。 我想store.add只会调用proxy中的create api,但是为什么destroy被调用了呢?
我看到 remove 引发了异常。如果抛出异常,是否意味着删除操作仍在等待中?所以它将添加和删除一起批处理?
【问题讨论】:
请记住,sync() 会将存储中的所有待处理操作批处理在一起。因此,如果您添加了 2 条记录,删除了 1 条并更新了 3 条,则调用 sync() 会将它们一起批处理 @existdissolve 不应该在调用删除后自动同步执行删除吗?如果是这样,我在删除后进行添加,它应该只剩下一个添加操作。在我的情况下,我运行 1 次删除,然后运行 1 次添加,我看到它在删除时调用了销毁,在添加时调用了创建和销毁。 向服务器发送请求时是否发生错误?您能发布执行 add() 位的代码吗? 是的,删除操作总是抛出异常:'"__data":[null],"success":true,"message":"删除成功","total":1' ,这会导致它挂起吗?很奇怪,我的 PHP 在删除时没有返回任何内容,但它得到了 '[null]'。 【参考方案1】:这不是由 ExtJS 引起的,它导致服务器响应“[null]”。 null 的数组被认为是一个异常,我猜这个异常会导致请求变得挂起。
【讨论】:
准确地说 - 这是一个第一个元素等于 null 的数组。这可能会造成严重破坏,因为这不是预期的数据。 @Thevs 我认为你是对的。为了满足我的好奇心,“浩劫”是什么意思? 我的意思是它不是您的fields
属性的格式。 “破坏”意味着您的程序的任何意外行为:)以上是关于ExtJS 存储添加调用创建和销毁的主要内容,如果未能解决你的问题,请参考以下文章