dojox / form / Manager onSubmit不止一次触发

时间:2014-02-20 16:30:29

标签: javascript dojo dgrid

我已经基于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;
}

1 个答案:

答案 0 :(得分:0)

每次调用submit时,您都会附加editRecord事件侦听器,这可能是每次显示对话框时。你真的只想附加一次听众。由于您每次都不会删除它并添加它,因此在每次调用editRecord之后,您实际上会在下一次提交时使相同的函数触发n + 1次。改为在创建表单后恰好连接一次提交事件处理程序。

如果我不得不猜测,store.put仅被调用一次的原因是因为您之后重置了表单,因此随后对submitRecord的重复调用将无法通过validate调用和保释在put来电之前退出。