我已经基于dgrid / OnDemandGrid声明了一个类。该类可以使用dojox / form / Manager显示所选记录以进行编辑,我将其放在dijit / Dialog中。编辑第一个记录时一切正常,但后续提交似乎会重复累积并重复触发提交事件,尽管put方法似乎每次提交只调用一次。
请在此处查看Firebug输出{{3}}(只需点击顶部的文件名)
编辑和提交方法类似于下面的代码。欢迎任何有关我的代码错误的建议。
提前致谢。
editRecord: function() {
this.editMode = "edit";
var rec = this.store.get(currentRowId);
var form = registry.byId(this.editFormId);
var dialog = registry.byId(this.dialogId);
form.reset();
form.setFormValues(rec);
form.on("submit", lang.hitch(this, this.submitRecord));
var cancelButton = registry.byId(this.cancelButtonId);
dialog.show().then(function(){cancelButton.focus();});
},
submitRecord: function(event) {
// Testing counter
if(!this.counter)
this.counter = 1;
else
this.counter++;
console.log("Submit event: " + this.counter);
// Get form, dialog and retrieve record
var form = registry.byId(this.editFormId);
var dialog = registry.byId(this.dialogId);
// Check validity
if(!form.validate()) {
return false;
}
var rec = form.gatherFormValues();
// Put record in store
this.store.put(rec).then( /*..... pop up status or error toaster (code omitted)..*/ );
// Dismiss dialog
form.reset();
dialog.hide();
// Stop submit event
event.stopPropagation();
event.preventDefault();
return false;
}
答案 0 :(得分:0)
每次调用submit
时,您都会附加editRecord
事件侦听器,这可能是每次显示对话框时。你真的只想附加一次听众。由于您每次都不会删除它并添加它,因此在每次调用editRecord
之后,您实际上会在下一次提交时使相同的函数触发n + 1次。改为在创建表单后恰好连接一次提交事件处理程序。
如果我不得不猜测,store.put
仅被调用一次的原因是因为您之后重置了表单,因此随后对submitRecord
的重复调用将无法通过validate
调用和保释在put
来电之前退出。