You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Handlebars预填充嵌入Slate文档的Foundry表单?格式问题求助

嘿,我来帮你解决这两个Slate表单预填充的问题:

关于prefilledValues无效的问题

你遇到的prefilledValues配置无效,大概率是这几个原因导致的,你可以逐一排查:

  • 检查字段名匹配度:你写的uri_name1、uri_name2必须和表单里对应输入框的name属性完全一致,包括大小写和拼写,哪怕差一个字符都不行。
  • 确认配置位置是否正确:不同Slate版本或表单插件的API可能有差异,有些场景下prefilledValues需要作为表单组件的props传入,而不是放在全局的文档配置里。比如正确的组件用法应该是这样:
<SlateForm
  prefilledValues={{
    uri_name1: "prefilledvalue1",
    uri_name2: "prefilledvalue2"
  }}
/>

如果是通过Slate的自定义节点嵌入表单,那需要把prefilledValues放在节点的data字段中,示例如下:

{
  "type": "form",
  "data": {
    "prefilledValues": {
      "uri_name1": "prefilledvalue1",
      "uri_name2": "prefilledvalue2"
    }
  },
  "children": [{ "text": "" }]
}
  • 排查数据传递时机:确保prefilledValues是在表单组件初始化时就传入的,如果是后续动态修改,需要结合状态管理(比如React的useState)来更新表单值。
关于使用Handlebars预填充表单

当然可以用Handlebars来实现,不过需要你做一点额外的集成工作,步骤大概是这样:

  1. 先安装Handlebars依赖:npm install handlebars或者yarn add handlebars
  2. 在Slate的表单渲染逻辑中,用Handlebars编译表单模板并注入预填充数据。这里给你一个简单的示例:
import Handlebars from 'handlebars';

// 自定义表单组件,用Handlebars渲染
const HandlebarsForm = ({ prefilledData }) => {
  // 定义Handlebars表单模板
  const formTemplate = `
    <form>
      <label>字段1:<input type="text" name="uri_name1" value="{{uri_name1}}" /></label>
      <label>字段2:<input type="text" name="uri_name2" value="{{uri_name2}}" /></label>
    </form>
  `;
  // 编译模板并注入数据
  const compiledTemplate = Handlebars.compile(formTemplate);
  const formHtml = compiledTemplate(prefilledData);

  // 渲染编译后的HTML
  return <div dangerouslySetInnerHTML={{ __html: formHtml }} />;
};

// 在Slate编辑器中使用这个组件
<Slate
  initialValue={[
    {
      type: 'handlebars-form',
      data: {
        prefilledData: {
          uri_name1: 'prefilledvalue1',
          uri_name2: 'prefilledvalue2'
        }
      },
      children: [{ text: '' }]
    }
  ]}
  renderElement={({ element, attributes }) => {
    if (element.type === 'handlebars-form') {
      return (
        <HandlebarsForm
          {...attributes}
          prefilledData={element.data.prefilledData}
        />
      );
    }
    return <DefaultElement {...attributes}>{element.children}</DefaultElement>;
  }}
/>
  1. 注意事项:使用dangerouslySetInnerHTML要警惕XSS风险,确保预填充的数据是来自可信来源;如果是开发Slate插件,也可以把Handlebars的编译逻辑封装在插件内部,让渲染更安全可控。

内容的提问来源于stack exchange,提问作者Salim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 21:32:58