表单
框架的关键概念之一是 表单(form) 。
当用户点击主菜单的菜单项时,会执行相应实体的 view 方法,该方法会创建查看表单。
- 此查看表单可以有 新建(New) 和 编辑(Edit) 按钮,点击这些按钮将执行
- 和 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"> [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_edit 和 apply_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_query
和 on_prefix_form_closed 事件。表单关闭后,会从 DOM 中移除。