表单

框架的关键概念之一是 表单(form)

当用户点击主菜单的菜单项时,会执行相应实体的 view 方法,该方法会创建查看表单。

此查看表单可以有 新建(New)编辑(Edit) 按钮,点击这些按钮将执行

insert_record

edit_record 方法。

这些方法会创建实体编辑表单。

表单基于 HTML 表单窗体模板 ,这些模板决定了表单的布局。 表单模板定义在项目的根目录中的 Index.html 文件中。

应用程序已具有用于查看和编辑数据、指定过滤器和报告参数的默认模板。

例如,演示项目的所有编辑表单都使用以下 html 模板:

<div class="default-edit">
    <div class="form-body">
        <div class="edit-body"></div>
        <div class="edit-detail"></div>
    </div>
    <div class="form-footer">
        <button type="button" id="ok-btn" class="btn btn-primary">
            <i class="bi bi-check-square"></i> OK<small class="muted">&nbsp;[Ctrl+Enter]</small>
        </button>
        <button type="button" id="cancel-btn" class="btn btn-secondary">
            <i class="bi bi-x-square"></i> Cancel
        </button>
    </div>
</div>

您可以定义自己的表单模板来创建自定义表单。请参阅 表单窗体模板

当某些方法创建表单时,应用程序会查找相应的 html 模板。

如果指定了 container (一个 Jquery 对象)参数,该方法会先清空它,再将 html 模板添加到其中;否则,它会创建一个空的模态表单,并将模板添加到表单中。

此后,它将实体的 prefix_form 属性分配给模板,触发 on_prefix_form_created 事件,显示表单并触发 on_prefix_form_shown 事件,其中 prefix 是表单的类型(view(查看)、edit(编辑)、filter(过滤)、param(参数))。 详情请参阅 表单窗体事件

以下是任务的 on_edit_form_created 事件处理程序的示例:

function on_edit_form_created(item) {
    item.edit_form.find("#ok-btn").on('click.task', function() { item.apply_record() });
    item.edit_form.find("#cancel-btn").on('click.task', function(e) { item.cancel_edit(e) });

    if (!item.master && item.owner.on_edit_form_created) {
        item.owner.on_edit_form_created(item);
    }
    if (item.on_edit_form_created) {
        item.on_edit_form_created(item);
    }

    item.create_inputs(item.edit_form.find(".edit-body"));
    item.create_detail_views(item.edit_form.find(".edit-detail"));

    return true;
}

在此示例中,使用了 JQuery 的 find 方法来查找表单上的元素。

首先,我们为 确定(OK)取消(Cancel) 按钮分配 JQuery 的 click 事件, 以便在用户点击按钮时执行

cancel_editapply_record 方法。

这些方法分别取消或应用对记录所做的更改,并调用 close_edit_form 方法来关闭表单。

然后,如果实体不是明细表,并且在其所有者的客户端模块中定义了事件处理程序 on_edit_form_created ,则执行此事件处理程序。

之后,如果实体在其客户端模块中定义了事件处理程序 on_edit_form_created , 则执行此事件处理程序。

在这些事件处理程序中,可以执行一些额外的操作。 例如,您可以为编辑表单模板中包含的按钮或其他元素分配点击事件, 更改 edit_options , 使用 create_table 方法创建表格,等等。

然后调用 create_inputs 方法, 在 class 为 "edit-body" 的元素中创建输入控件。

最后,调用 create_detail_views 方法,在 class 为 "edit-detail" 的元素中创建明细表。

备注

即便表单模板中缺失部分元素,该方法也不会抛出异常。

close_prefix_form,其中 prefix 是表单的类型,用于关闭该类型的表单。 但在表单关闭之前,会触发 on_prefix_form_close_queryon_prefix_form_closed 事件。表单关闭后,会从 DOM 中移除。