在表单之间导航并保留数据的方法
本指南说明在创建新记录时,如何在表单之间导航并在表单间保持数据完整性。
该模式包括:
一个包含按钮以打开空表单(表单2)的视图。
表单2,带有用于返回到表单 1 的导航按钮。
表单1,作为接收来自表单 2 数据的目标表单。
1. 设置初始视图
向视图中添加一个 New 按钮,用于打开表单 2 :
// ===== VIEW CONFIGURATION =====
function on_view_form_created(item) {
item.view_form.find('#new-btn')
.text('New')
.off('click.task')
.on('click', function() {
openForm2();
});
item.refresh_page(true);
}
function openForm2() {
task.f2.open({open_empty: true});
task.f2.append_record();
}
2. 配置表单 2(中间表单)
为表单 2 设置一个 **下一表单(Next Form)**(下一表单)按钮,用于导航回表单1:
// ===== FORM 2 CONFIGURATION =====
function on_edit_form_created(item) {
item.edit_form.find('#ok-btn')
.text('Next Form')
.off('click.task')
.on('click', function() {
item.close_edit_form();
setTimeout(function() {
openForm1(item);
}, 300);
});
}
function openForm1(item) {
task.f1.open({open_empty: true});
task.f1.append_record();
}
function on_edit_form_close_query(item) {
return true;
}
3. 配置表单1(目标表单)
将表单 2 的数据映射到表单 1 字段:
// ===== FORM 1 CONFIGURATION =====
function on_edit_form_created(item) {
var title = 'First Form value: ';
if (item.is_new()) {
// 将数据从表单2传到表单1
item.f1t1.value = task.f2.f2t1.value;
if (item.f1t1.value) {
title += item.f1t1.value + ' value typed';
}
item.edit_options.title = title;
} else {
title = item.f1t1.value;
item.edit_options.title = title;
}
}
需要记住的关键点
open_empty:true:确保表单以无预加载数据的状态打开
append_record():向表单添加一个新的空记录
setTimeout():在打开下一个表单之前给当前表单适当的关闭时间
on_edit_form_close_query:返回 true 可绕过未保存更改的警告
字段映射参考
来源 |
目标 |
说明 |
|---|---|---|
task.f2.f2t1.value |
item.f1t1.value |
将表单 2 字段 f2t1 的数据传到表单 1 字段 f1t1 |