在表单之间导航并保留数据的方法

本指南说明在创建新记录时,如何在表单之间导航并在表单间保持数据完整性。

该模式包括:

  • 一个包含按钮以打开空表单(表单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

另见

on_edit_form_close_query

表单窗体

create_edit_form

edit_form