首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

具有Admin-on-rest的Master-Detail (父子)输入表单

基础概念

Admin-on-rest 是一个用于构建管理界面的React框架,它提供了一系列组件和工具来简化CRUD(创建、读取、更新、删除)操作。Master-Detail(父子)输入表单是指在一个界面中同时展示和处理主记录(Master)和与之关联的详细记录(Detail)的表单。

相关优势

  1. 用户体验:用户可以在一个页面上完成所有相关操作,减少了页面跳转,提高了效率。
  2. 数据一致性:主记录和详细记录在同一页面上编辑,可以确保数据的一致性。
  3. 简化开发:Admin-on-rest提供了丰富的组件和钩子函数,简化了复杂表单的开发过程。

类型

  • 单详细记录:主记录关联一个详细记录。
  • 多详细记录:主记录关联多个详细记录。

应用场景

  • 订单管理系统:一个订单(Master)包含多个订单项(Detail)。
  • 产品目录:一个产品(Master)有多个规格或变体(Detail)。
  • 项目管理:一个项目(Master)有多个任务(Detail)。

示例代码

以下是一个简单的Master-Detail表单示例,使用Admin-on-rest框架:

代码语言:txt
复制
import * as React from 'react';
import { List, Datagrid, TextField, Edit, Create, SimpleForm, TextInput, ReferenceInput, SelectInput, TabbedForm, FormTab } from 'admin-on-rest';

export const ProductList = (props) => (
    <List {...props}>
        <Datagrid>
            <TextField source="id" />
            <TextField source="name" />
            <EditButton />
        </Datagrid>
    </List>
);

export const ProductEdit = (props) => (
    <Edit {...props}>
        <TabbedForm>
            <FormTab label="General">
                <TextInput source="name" />
            </FormTab>
            <FormTab label="Variants">
                <ReferenceInput source="productId" reference="products" allowEmpty>
                    <SelectInput optionText="name" />
                </ReferenceInput>
                <ProductVariantList />
            </FormTab>
        </TabbedForm>
    </Edit>
);

export const ProductVariantList = (props) => (
    <List {...props}>
        <Datagrid>
            <TextField source="id" />
            <TextField source="color" />
            <TextField source="size" />
            <EditButton />
        </Datagrid>
    </List>
);

export const ProductVariantEdit = (props) => (
    <Edit {...props}>
        <SimpleForm>
            <TextInput source="color" />
            <TextInput source="size" />
        </SimpleForm>
    </Edit>
);

遇到的问题及解决方法

问题:在编辑主记录时,详细记录的数据没有及时更新。

原因:可能是由于数据同步机制没有正确设置,导致主记录和详细记录之间的数据不同步。

解决方法

  1. 使用useEffect钩子:在详细记录组件中使用React的useEffect钩子来监听主记录的变化,并相应地更新详细记录。
  2. 手动触发更新:在主记录编辑完成后,手动触发详细记录的重新获取或更新操作。
代码语言:txt
复制
import { useEffect } from 'react';
import { useRecordContext } from 'admin-on-rest';

const ProductVariantList = (props) => {
    const record = useRecordContext();

    useEffect(() => {
        // 触发详细记录的重新获取或更新操作
        console.log('Product changed:', record);
    }, [record]);

    return (
        <List {...props}>
            <Datagrid>
                <TextField source="id" />
                <TextField source="color" />
                <TextField source="size" />
                <EditButton />
            </Datagrid>
        </List>
    );
};

通过这种方式,可以确保主记录和详细记录之间的数据始终保持同步。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

AngularJS中使用表单输入的应用设计

在Angular中使用表单元素非常方便。正如我们在前面几个例子中看到的,你可以使用ng-model属性把元素绑定到你的模型属性上。...这一机制对于所有标准的表单元素都可以起作用,例如文本框、单选按钮、复选框,等等。...如果你正在使用表单把输入项组织起来,你可以在form自身上使用ng-submit指令来指定一个函数,当表单提交的时候可以执行这个函数。...我们来扩展前面的例子,实现用户点击一个按钮就可以为他所选的商品计算金额: 同时,在提交表单的时候,ng-submit还会自动阻止浏览器执行默认的POST操作。...对于处理其他事件的情况,例如提供非表单提交型的交互,Angular提供了一些事件处理指令,它们类似于浏览器原生的事件属性。

2.1K60
  • Go HTTP 编程 | 03 - 表单的输入与验证

    一、表单的输入 表单是 Web 应用中非常中重要的组成部分,通过表单可以方法的让客户端和服务器进行数据的交互。...Go 中对于 form 的处理非常方便,在 Request 中有专门的 form 处理方法。 以登录表单为例,新建一个登录表达 login.gtpl,表单内容如下: <!...= nil { // 转换为 int 类型出错,说明用户的输入不是数字 } // 用户输入的数字转换成功,进行下一步操作 if age > 100 { // 年龄超过指定范围 } 还可以通过正则表达式的方式来获取...中文和英文 如果想要获取表单中的中文字符,并确保获取的是正确的中文字符,需要进行验证,而不是随便输入,中文只有通过正则来验证: if m, _ := regexp.MatchString("^[\\x{...m { return false } 日期与时间 想要判断用户输入的时间是否正确,可以使用 Go 的 time 包,可以将用户的输入转换成相应的时间,然后进行逻辑判断: t := time.Date

    1.4K20

    16 处理表单数据与父子组件之间的数据交换

    input类型 父子组件的表单数据交换 1,使用sync 2,使用v-model模式 处理表单输入 vue开发中获取表单输入的值,不是像JQuery那样是主动查询一个Html组件,然后访问其属性...vue获取表单输入的数据,是通过被动的方式。在vue组件有输入操作时,主动将数值绑定到data变量上;在提交表单前,从data数据源取得表单数据。...vue对有限个数的表单组件进行特别处理,包括: 1,单行文本 的输入数字的控件(比如 slider 控件)。 reset 定义重置按钮(重置所有的表单值为默认值)。 searchNew 定义用于输入搜索字符串的文本字段。...父子组件的表单数据交换 在vue开发中我们经常会需要定义一个子组件,然后在这个子组件中获取的表单数据,需要往父组件传递。

    2.6K10

    通过Bootstrap 输入框组,表单控件的使用案例

    Bootstrap 支持的另一个特性,输入框组。输入框组扩展自 表单控件。使用输入框组,您可以很容易地向基于文本的输入框添加作为前缀和后缀的文本或按钮。...通过向输入域添加前缀和后缀的内容,您可以向用户输入添加公共的元素。例如,您可以添加美元符号,或者在 Twitter 用户名前添加 @,或者应用程序接口所需要的其他公共的元素。...为了保持跨浏览器的兼容性,请避免使用 元素,因为它们在 WebKit 浏览器中不能完全渲染出效果。也不要直接向表单组应用输入框组的 class,输入框组是一个孤立的组件。...您可以通过向 .input-group 添加相对表单大小的 class(比如 .input-group-lg、input-group-sm)来改变输入框组的大小。...输入框中的内容会自动调整大小。

    2K20

    前端表单输入框自动填充和覆盖逻辑的实现

    在Web开发中,动态表单的联动操作,是非常常见的需求,尤其是在需要实现复杂逻辑时,更是不可或缺。...需求描述现在我们来探讨一个具体的需求场景:页面上有一个表单,其中包含一个公司名称输入框(input)和一个所有公司下拉菜单(select),下拉菜单的选项,比方说有腾讯、阿里巴巴、百度和字节跳动。...当选中下拉菜单的某个选项时,将该选项的值,会自动填充到输入框中。但如果输入框已经有用户手动输入的值,且该值不在选项列表中,则不覆盖。...总结虽然这是一个很小的业务功能点,但里面的细节还是有一些的。通过实现公司名称和选择公司选项的联动功能,我们可以大大提升用户填写表单的便捷性和体验。...当用户选择公司的时候,自动填充公司名称不仅减少了手动输入的麻烦,还能避免输入错误。这种精细的用户体验设计,虽然看似简单,却能显著提升用户对表单的使用满意度,增强系统的易用性和专业性。

    72284

    表单文本框的使用(二) 输入过滤(合成事件)

    表单文本框的使用(二) 输入过滤(合成事件) 输入过滤 屏蔽字符 情景:输入框需要限制出现的字符,比如只能是数字。 输入框本身是没有这个功能的,但是我们可以通过JavaScript来实现。...我们能实现向输入框中输入字符,依靠的是键盘事件,所以可以通过添加键盘事件,然后根据事件对象的信息来判断符不符合条件,不符合条件,就通过event.preventDefault阻止默认事件,即阻止输入。...处理剪切板 上面我们已经实现只能输入数字了,但是如果我们从外部复制了非数字的数据,粘贴到文本框里就会突破我们的输入过滤。...处理中文、日语等输入法 当我们使用输入法时,还是会绕过了我们的只能输入数字的限制。 这里引入一个比较有意思的知识点合成事件 中文这种是需要同时按下多个键才能输入一个字符的。...合成事件就是用来检测和控制这种输入,输入的字符在事件对象的data中。

    1.4K20

    salesforce 零基础开发入门学习(四)多表关联下的SOQL以及表字段Data type详解

    此篇主要讲解表字段的Data type的每种类型以及多表关联下的SOQL查询,由于多表关联涉及到Data type中的look up或者master-detail,所以先讲一下Data type类型。...:创建链接一个对象和另一个对象的关系,创建关系后,通过一个对象可以访问另一个对象的内容信息; 4.Master-Detail Relationship:创建一个特殊的父子关系(主从关系),和lookup...,此类型包含经纬度信息; 12.Number:允许输入任何的数字,如果输入的全是0则全部移除; 13.Percent:声明一个百分比类型; 14.Phone:声明一个手机号码类型,输入的内容自动转换成此类型...比如,查看文章的权限可以是管理员具有查看权利,也可以是普通用户具有查看的权利;一个管理员可以有查看的权限,也可以有修改的权限。...输入字段名称,此处输入PRIVELEGEID,鼠标移动到Field Name,则自动赋值,如图5,一直点击next; 7.点击save&new按钮,重复4--6步骤,将于ROLE表关联的字段创建,Field

    2.6K91

    Vue 框架学习系列八:Vue 3 中的事件处理与表单输入

    引言在Vue 3中,事件处理和表单输入是构建交互式用户界面的基础。Vue提供了一套简洁而强大的API,使得处理用户输入和事件变得轻松而直观。...本文将深入探讨Vue 3中的事件处理机制以及如何在表单中捕获和处理用户输入。...修饰符:v-model还有一些有用的修饰符,用于处理不同类型的输入:.trim:自动过滤用户输入的首尾空白字符。.number:将用户的输入转换为数值类型(如果转换失败,则返回原始值)。....,你应该已经掌握了Vue 3中事件处理和表单输入的基本用法。...事件处理使得你可以响应用户的交互行为,而表单输入则允许你捕获和处理用户输入的数据。这些功能是构建交互式Web应用不可或缺的部分,希望本文能帮助你更好地理解和使用它们。

    15410

    用Flex模拟智能手机表单输入的自动放大功能

    用iphone或itouch登录过微薄的同学们想必都会发现:登录一些手机版网站(比如微薄时),表单中的输入框会自动放大,以方便用户输入,等输入完成后,页面会再次缩小到正常状态。...在flex开发过程中,有时也会遇到一些输入项很多的表单,可以借鉴iphone上的这种体验,基本思路就是:将整个容器放大,以适应屏幕,然后将获得焦点的文本框定位到屏幕中央。...下面是演示: 当UserName与PassWord文本框获得焦点时,表单(其实就是panel)会自动放大,并重新定位,最终将获得焦点的文本框定位在屏幕中央,以方便输入。...private var SH:Number;//舞台的高度 private var WH:Number;//panel的高度 private var WW:Number;//panel...:Number = current.y * radio + loginWin.y + loginWin.titleDisplay.height*radio; //当前焦点对应的文本框中心点的实际位置

    93060

    登录注册小案例实现(使用Django中的form表单来进行用户输入数据的校验)

    其实,不那样用的最主要的原因是:django中提供了一个form表单的功能,这个表单可以用来验证数据的合法性还可以用来生成HTML代码!!!...(1)纯理论来讲讲form表单: ①form表单的引入: 登录页面和注册页面都会用到form表单来提交数据 当数据提交到后台后,需要在视图函数中去验证数据的合法性. django中提供了一个form表单的功能...最大长度 min_length 最小长度 widget 负责渲染网页上HTML 表单的输入元素和提取提交的原始数据 attrs 包含渲染后的Widget 将要设置的HTML 属性 error_messages...""" # def clean(self): # 前端表单用户输入的数据经过上面过滤后再结合后台数据库所有数据进行分析 # # 校验数据库中是否有该用户 #...ILsinMw9...VBBR'], 'username': ['124134314'], 'password': ['3432423']}> 会发现它是一个字典类型,包含了用户输入的数据

    4.4K00

    登录注册小案例实现(使用Django中的form表单来进行用户输入数据的校验)

    登录注册案例 1.登录注册第一步——创建模型生成数据表: (1)名为mucis的app下的models.py文件中创建: from django.db import models # Create your...(max_length=30, unique=True) password = models.CharField(max_length=50) (2)执行映射文件生成数据表: 2.基本框架的搭建...:别看我这注册和登录的页面一模一样,你就以为这俩直接共用一个模板就行了!...真正使用的时候注册需要的信息是比登录要多,所以这俩不可能使用同一个模板。本处为了方便讲解,所以只建了个含有用户名和密码的模型。所以会造成注册和登录可以用同一个模板的假象!...不信你看我在下面注册模板中又随便加了个输入框,但是其实它没用,我只是为了强调这个问题! <!

    4.7K00

    如何使用 Hilla 管理全栈 Java 开发

    如果端点、参数或返回类型发生任何变化,就会重新生成代码,并在客户端报告相应的错误。这有助于检测开发期间 API 使用中的错误。 示例应用程序 该应用程序将显示一个个人数据表,可以使用表单对其进行编辑。...如果在客户端的表单中使用 Person 实体,则会根据注释验证输入(图 2)。 图 2:验证 下一步,创建端点以读取和保存人员数据。...编辑人员 编辑人员数据需要创建表单。为此,使用了 Vaadin Web 组件,如图 10 所示。...这将填充表单。...包含的 Vaadin Web 组件(例如网格)对于开发数据密集型应用程序也非常有帮助。活页夹,特别是与 Bean 验证结合使用,可以非常轻松地创建表单并将代码减少到最低限度。

    97830

    xwiki开发者指南-主从视图教程

    本次教程介绍了如何在XWiki使用一分钟创建App (AWM)和一些自定义的编码来实现一个主从视图(master-detail view)。...更具体地说,我们希望有一个拥有2个字段的HTML表单,当我们选择一个字段的一个值,另一个字段基于第一个字段的选择自动更新它的值。...第1步:创建一个State Data应用程序 第一步使用AWM来创建一个应用程序来允许输入一些州和城市。创建一个名为“StateData”的应用程序,设计的表单如下图所示: ?...除了可以创建自己的页面来返回JSON,我们也可以复用State应用程序的Livetable结果页面。这将避免创建一个新的页面,从而跳过第6个步骤。...这里有一个XAR文件包含了本次教程的所有步骤,你可以导入到你的XWiki。

    53510
    领券