从商店中删除记录时(使用api)反馈用户的正确方法是啥?
Posted
技术标签:
【中文标题】从商店中删除记录时(使用api)反馈用户的正确方法是啥?【英文标题】:What's the correct way of feedback the user when a record is deleted from the store (using api)?从商店中删除记录时(使用api)反馈用户的正确方法是什么? 【发布时间】:2013-05-28 00:46:23 【问题描述】:我正在使用一个Store
,它有一个声明了api
的代理。我可以使用exception listener
处理异常,但是如何在成功删除记录时向用户发送消息?
我的商店看起来像:
Ext.define('ContatosApp.store.PsContatosStore',
extend: 'Ext.data.Store',
requires: [
'ContatosApp.model.PsContatosModel'
],
constructor: function(cfg)
var me = this;
cfg = cfg || ;
me.callParent([Ext.apply(
autoLoad: true,
autoSync: true,
model: 'ContatosApp.model.PsContatosModel',
storeId: 'MyJsonStore',
pageSize: 15,
trailingBufferZone: 20,
proxy:
type: 'ajax',
api:
read: 'contact/list',
create: 'contact/save',
update: 'contact/update',
destroy: 'contact/delete'
,
directionParam: 'order',
limitParam: 'max',
startParam: 'offset',
url: '',
reader:
type: 'json',
root: 'contatos'
,
writer:
type: 'json',
root: ''
,
listeners:
exception:
fn: me.onAjaxException,
scope: me
, cfg)]);
,
onAjaxException: function(proxy, response, operation, eOpts)
var data = Ext.JSON.decode(response.responseText);
Ext.MessageBox.show(
title: 'Error',
msg: data.message,
icon: Ext.MessageBox.ERROR,
buttons: Ext.Msg.OK
);
);
我的删除按钮处理程序是:
var grid = Ext.ComponentQuery.query('#MyGridPanel');
var selection = grid[0].getSelectionModel().getSelection()[0];
if (selection)
Ext.getStore('PsContatosStore').remove(selection);
另外,如果我从存储中删除记录,但 ajax 调用返回错误,我需要重新加载网格以再次显示记录,或者有更好的方法来处理这个问题?
【问题讨论】:
【参考方案1】:您可以使用 requestcomplete 对所有 ajax 调用全局执行此操作。
对于特定代理,您可以使用afterRequest:
proxy:
...
listeners:
exception:
fn: me.onAjaxException,
scope: me
afterRequest: function( aRequest, aSuccess )
console.log( aSuccess );
【讨论】:
嗯,我添加了afterRequest
,但console.log()
没有显示任何内容。我发出了警报,似乎没有触发。
绝对适合我。你确定服务器被调用并且确实返回成功吗?
以这种方式使用 afterRequest 几乎不是一个 hack。事实上,它实际上是打算使用的方式。来自文档:“这是一个模板方法。一个挂钩到这个类的功能。随意在子类中覆盖它。” docs-devel.sencha.com/extjs/4.2.1/#!/api/…
感谢您的存在。只是对于 4.1,此方法未记录在案。我已经编辑了我的答案。
好的,我最终在 onAjaxException 中使用了全局 requestcomplete + rejectChanges()。谢谢!【参考方案2】:
查看sync() 的文档。您可以传递成功和失败回调,当从服务器接收到成功响应或错误时将触发这些回调。
至于将记录放回网格中,请查看商店的 rejectChanges() 方法。我通常在我的失败回调中调用它。
【讨论】:
谢谢,sync()
工作。问题是在这种情况下我无法访问 ajax 响应。以上是关于从商店中删除记录时(使用api)反馈用户的正确方法是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 rest API 在应用程序启动时正确初始化 Vuex 商店?