我在3个事件上签署了表格,但事件'actioncomplete'没有被解雇。执行其他两个事件,执行成功回调。
if(obj instanceof Ext.form.BasicForm){
var before='beforeaction';
var complete='actioncomplete';
var error='actionfailed';
}
obj.addListener( before,
function(o,e) {
this.changeSysState(lang[msg_id].loading,'loading','load_N_'+this.load_id);
}, this);
obj.addListener( complete,
function(o,e) {
this.showStatus(lang[msg_id].complete,'complete','load_N_'+this.load_id);
obj.addListener( error,
function(o,e) {
this.changeSysState(lang[msg_id].error,'error','load_N_'+this.load_id);
}, this);
我的表格
var changePanel = new Ext.form.FormPanel({
labelWidth : 132,
layout : 'form',
border : false,
defaults:{allowBlank:false,width:165},
url : '/xstore/xstore_change_pass.php',
items : [ /*some fields*/ ]
});
提交电话
var form = changePanel.getForm();
form.submit({
success: function(r,o) {
winPass.destroy();
}
});
服务器返回
{"success":true}
使用ExtJs 3.4
答案 0 :(得分:2)
通过该响应,应该触发actioncomplete
。你应该搜索它为什么不是的原因。我看到您的代码可能会导致此行为的一些问题:
您将before
,complete
,error
声明为局部变量,并将它们用于范围之外;这可能是一个问题;请改用:
if(obj instanceof Ext.form.BasicForm){
var before='beforeaction';
var complete='actioncomplete';
var error='actionfailed';
obj.addListener( before, function(o,e) {
this.changeSysState(lang[msg_id].loading,'loading','load_N_'+this.load_id);
}, this);
obj.addListener( complete, function(o,e) {
this.showStatus(lang[msg_id].complete,'complete','load_N_'+this.load_id);
}, this);
obj.addListener( error, function(o,e) {
this.changeSysState(lang[msg_id].error,'error','load_N_'+this.load_id);
}, this);
}
你在success
回调中摧毁了一些东西;此success
回调在actioncomplete
之前触发,因此如果它也会破坏表单,则可能是另一个问题
如果这些都没有帮助,请检查开发人员工具以获取服务器响应。可能会返回一些错误代码也可能是原因。
Here is fiddle您可以在其中看到第二个问题(actioncomplete
在销毁表单后未触发)。