文章大纲

easyui form load加载表单数据,如何防止触发onChange事件

2024-07-07 07:30:09


功能介绍

本人用fabricjs开发了如下功能:


  1. 左边是用fabric.js绘制的画布界面,右边是easyui.js初始化的表单。
  2. 选中左边canvas画布里的元素,可以从右边表单看到选中元素的属性数据。
  3. 右边表单输入框都添加了onChange事件,修改属性值,可以重绘左边画布里的元素。



遇到的问题

现在遇到的问题是:

当选中画布里的元素时,右边表单所有输入框的onChange事件都执行了一遍。



解决方法

添加一个状态变量isLoading


  1. 选中画布元素时,在表单数据加载之前,设置isLoading为true,表示表单正在加载。
  2. 表单数据load完之后,再设置isLoading为false,表示表单已加载完成。
  3. 表单输入框里的onChange事件,添加一个if判断,只有当表单加载完成,才执行画布元素重绘的操作。



代码实现

选中画布元素

canvas.on("selection:created", function(){
    console.log("selection:created");
    var object = canvas.getActiveObject();
    showSettingData(object);
});


开始加载表单

function showSettingData(object){
    isLoading = true;
    var type = object.get("type");
    //...
    loadFormData(type, object);
}


表单加载完成

function loadFormData(type, eleObject){
    var formData = makeFormData(type, eleObject);
    var arrNumericField = ['width', 'height', 'top', 'left'];
    $.each(formData, function(fieldName, value){
        if(-1 !== arrNumericField.indexOf(fieldName)){
            formData[fieldName] = parseInt(value);
        }
    });
    $("#form_" + type).form('load',formData);
    isLoading = false;
}

 

onChange事件添加条件

var configTextInput = {
    onChange: function(newVal, oldVal){
        if(!isLoading){
            reRenderCanvas();
        }
};


我要评论
评论列表