IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 项目管理软件dhtmlxGantt配置教程(七):如何自定义内联编辑器 -> 正文阅读

[开发工具]项目管理软件dhtmlxGantt配置教程(七):如何自定义内联编辑器

您可以指定自定义内联编辑器。为此,您需要通过以下方式创建一个新的编辑器对象:

gantt.config.editor_types.custom_editor = {
  show: function (id, column, config, placeholder) {
    // called when input is displayed, put html markup of the editor into placeholder 
    // and initialize your editor if needed:
    var html = "<div><input type='text' name='" + column.name + "'></div>";
    placeholder.innerHTML = html;
  },
  hide: function () {
    // called when input is hidden 
    // destroy any complex editors or detach event listeners from here
  },
 
  set_value: function (value, id, column, node) {
    // set input value
  },
 
  get_value: function (id, column, node) {
    // return input value
  },
 
  is_changed: function (value, id, column, node) {
    //called before save/close. Return true if new value differs from the original one
    //returning true will trigger saving changes, returning false will skip saving 
  },
 
  is_valid: function (value, id, column, node) {
    // validate, changes will be discarded if the method returns false
    return true/false;
  },
 
  save: function (id, column, node) {
     // only for inputs with map_to:auto. complex save behavior goes here
  },
  focus: function (node) {
  }
}

为了实现可重用的编辑器,需要记住一些关键点:

  • 作为一项规则,get_value不修改任务对象。该方法只返回内联编辑器的当前值。如果该值被认为有效,甘特图将自动使用该值更新相关任务。
  • 使用map_to编辑器的配置选项来指定任务的哪个属性应该由编辑器更新,但不要将其硬编码到编辑器中。这种方式允许您为不同的列重用编辑器。
  • 除非您使用复杂的 javascript 小部件,否则您不需要在hide函数中指定任何逻辑,因此您可以将其留空。否则,使用此方法调用析构函数或清理您在显示编辑器时附加的任何事件处理程序。
  • 确保实现is_changed和is_valid功能:
  • 如果is_changed总是返回true,则每次关闭编辑器时,编辑器都会触发更新(可以发送到后端)。仅当输入值与初始状态相比实际发生了变化时,此方法才应返回true ;
  • is_valid用于防止输入无效值。

如果您正在实现一个编辑器,它比将值写入任务的属性更复杂 - 一个很好的例子是内置的前置编辑器-您需要在save函数中实现所需的逻辑并指定map_to输入“自动”。在这种情况下,甘特图不会修改任务对象,而是会save在需要将所做的更改应用到编辑器时调用该函数。

下面是一个简单数字输入的实现示例。请注意,该hide方法可以是一个空函数,并且该save方法可以完全跳过。

var getInput = function(node){
    return node.querySelector("input");
}; 
gantt.config.editor_types.simpleNumber = {
    show: function (id, column, config, placeholder) {
        var min = config.min || 0,
        max = config.max || 100;
        var html = "<div><input type='number' min='" + min + 
                      "' max='" + max + "' name='" + column.name + "'></div>";
        placeholder.innerHTML = html;
    },
    hide: function () {
      // can be empty since we don't have anything to clean up after the editor 
          // is detached
    },
    set_value: function (value, id, column, node) {
        getInput(node).value = value;
    },
    get_value: function (id, column, node) {
        return getInput(node).value || 0;
    },
    is_changed: function (value, id, column, node) {
        var currentValue = this.get_value(id, column, node);
        return Number(value) !== Number(currentValue);
    },
    is_valid: function (value, id, column, node) {
        return !isNaN(parseInt(value, 10));
    },
    focus: function (node) {
        var input = getInput(node);
        if (!input) {
            return;
        }
        if (input.focus) {
            input.focus();
        }
 
        if (input.select) {
          input.select();
        }
    }
};

之后,您可以像使用内置编辑器一样使用编辑器:

var numberEditor = {type: "simpleNumber", map_to: "quantity", min:0, max: 50}; 
gantt.config.columns = [
    ...
    {name: "quantity", label: "Quantity", width: 80, editor: numberEditor, 
        resize: true},
    ...
];

请注意,在这种情况下我们不需要实现该hide方法,因为甘特图会自动分离编辑器的 DOM 元素,并且在编辑器关闭后我们不需要清理任何其他内容。

编辑器.hide

hide如果您在内联编辑器中使用复杂的小部件,您可能需要添加逻辑。

例如,让我们考虑以下使用 jQuery 实现的 DatePicker 输入。在这种情况下,我们需要在它与 DOM 分离后销毁日期选择器小部件。

先决条件:

<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

编辑:

gantt.config.editor_types.custom_datepicker_editor = {
    show: function (id, column, config, placeholder) {
        placeholder.innerHTML = "<div><input type='text' id='datepicker' name='" + 
                                  column.name + "'></div>";
        $("#datepicker").datepicker({
            dateFormat: "yy-mm-dd",
            onSelect: function(dateStr){
                gantt.ext.inlineEditors.save()
            }
        });
    },
    hide: function (node) {
        $("#datepicker").datepicker( "destroy" );
    },
 
    set_value: function (value, id, column, node) {
        $("#datepicker").datepicker("setDate", value);
    },
 
    get_value: function (id, column, node) {
        return $("#datepicker").datepicker( "getDate" );
    },
 
    is_changed: function (value, id, column, node) {
        return (+$("#datepicker").datepicker( "getDate" ) !== +value);
    },
    is_valid: function (value, id, column, node) {
        return !(isNaN(+$("#datepicker").datepicker( "getDate" )))
    },
    save: function (id, column, node) {
    },
    focus: function (node) {
    }
};
 
let dateEditor = {
    type: "custom_datepicker_editor",
    map_to: "start_date"
};
 
gantt.config.columns = [
    {name: "text", tree: true, width: '*', resize: true},
    {name: "start_date", align: "center", resize: true, editor: dateEditor},
    {name: "duration", align: "center"},
    {name: "add", width: 44}
];

编辑器.保存

save只有当您的编辑器需要一次修改任务的多个属性,或者您希望它修改与任务不同的对象时,您才需要使用该功能。

在这种情况下,您可以get_value为内置验证保留正确的实现,但甘特图本身不会尝试将编辑器的值应用于任务,save而是调用该函数。

调用后save,您需要解释输入值并使用自定义代码将更改应用于甘特图。Gantt 将在方法完成后调用onSave事件save,但不会为修改的行调用gantt.updateTask。

笔记!仅当您在编辑器的配置中save指定时才会调用该方法:map_to:"auto"

var editors = {
    ...
    predecessors: {type: "predecessor", map_to: "auto"}
};

dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足项目管理应用程序的所有需求,是最完善的甘特图图表库。了解更多DhtmlxGantt相关内容和资讯,欢迎评论区留言互动,我们一起沟通交流!


  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章           查看所有文章
加:2022-10-22 21:35:05  更:2022-10-22 21:38:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:48:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码