课程章节介绍
同学,我们来看这一页幻灯片,它讲的是在Lightning Web Components里,如何正确处理sObject数据输入以及事件的几个关键点。
首先你要记住,当我们需要把前端的sObject数据传给Apex方法,或者放到一个属性里传给父组件时,常常要用JSON.stringify把对象转成字符串。但这里一定要注意:序列化的时候,sObject必须带上type字段。也就是说,你的数据对象要像这样:{ attributes: { type: "Contact" }, LastName: "张三" }。如果你漏了type,后端就没法识别这是哪种记录。
幻灯片举了一个创建联系人的例子。它会在组件里维护一个defaultContact对象,这个对象里已经包含type字段。然后每次用户修改表单中的字段,处理程序就会更新这个对象,并且在每次修改时立即用JSON.stringify序列化整个defaultContact。这样做的好处是每一步都有完整的数据结构。
更复杂一点的情况是动态行,比如创建多个账户。幻灯片用SObject收集输入形容这个过程,你可以通过添加行和删除行的按钮来管理这些动态输入。为了保证每一行都能被框架正确追踪,要给每一行设置唯一的迭代键。然后,幻灯片提供了一个方法叫getAccountsFromSYS,它会把所有行数据映射成sBody格式。映射的时候,一定记得为每个账户对象添加type属性,比如{ attributes: { type: "Account" }, Name: "新账户" },之后再调用JSON.stringify。这样就能把整组账户一次性序列化。
接下来幻灯片提到了一个JavaScript接口摘要,这是指组件配置文件里定义的接口。组件接口会涵盖五种输入:inputVariables、builderContent、elementInfo、genericTypeMappings和validate。同时我们还要声明三种事件类型。而且幻灯片强调,所有自定义事件都必须设置bubble: true和composed: true。bubble为真事件会向上冒泡,composed为真则能穿过Shadow DOM边界,这样父组件或应用构建器才能接收到。
在处理数据类型时,接口中用newValueDataType字段来指定接收的数据类型。类型有四种:String、Number、SObject(用于一般的文本类型对象)和Reference(用于引用记录变量)。你可以根据输入变量的用途选择合适的类型。
最后,如果你要使用通用sObject编辑器,就需要用到genericTypeMappings,它允许你动态地读取或写入类型分配,让组件能处理不同种类的sObject,而不必为每种对象单独写逻辑。
总结一下,今天我们理解了几个要点:用JSON.stringify序列化sBody时必须包含type字段;动态行要用唯一键并映射出带type的格式;接口事件要设置bubble和composed为true;正确指定newValueDataType;以及通用编辑器里利用genericTypeMappings来灵活分配类型。这些细节在构建交互式组件时非常实用,一定要在练习中自己写一遍加深印象。
关键词
LWC
Lightning Web Components
Salesforce