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

Vue JSONForms自定义文本渲染器报错:r.tester is not a function

错误含义与修复方案

错误含义

r.tester is not a function 表示JSONForms在匹配渲染器时,尝试调用你注册的渲染器条目里的tester属性,但该属性无法被识别为可执行函数,导致匹配逻辑失败。

问题原因与修复步骤

你的代码中tester: rankWith(1, isStringControl)本身是正确的(rankWith会返回符合要求的tester函数),核心问题出在渲染器条目未被正确注册到JSONForms的渲染器注册表中,导致框架无法正确识别tester的函数类型。

1. 正确注册自定义渲染器

在Vue应用入口文件(如main.ts)中,将你的自定义渲染器条目添加到JSONForms的配置内:

import { createApp } from 'vue'
import App from './App.vue'
import { JsonForms } from '@jsonforms/vue'
import { vanillaRenderers } from '@jsonforms/vue-vanilla'
// 导入你的自定义渲染器条目
import { entry as CustomTextRenderer } from './components/RenderersText.vue'

const app = createApp(App)
app.use(JsonForms, {
  // 合并官方渲染器与自定义渲染器,官方渲染器可作为降级备选
  renderers: [...vanillaRenderers, CustomTextRenderer]
})
app.mount('#app')

2. 修复组件模板的缺失问题(后续必现错误)

你的模板中使用了<v-input>但未导入或注册该组件,若使用原生输入框,可修改模板如下(useJsonFormsControl会返回data、handleChange、label等核心属性):

<template>
  <input
    :value="data"
    @input="handleChange"
    :placeholder="label"
    :disabled="disabled"
  />
</template>

3. 验证tester函数有效性(可选排查步骤)

若仍有疑问,可在渲染器组件文件中添加测试代码,确认tester函数正常:

// 在<script>标签内添加
const testTester = rankWith(1, isStringControl)
// 控制台应输出1,表示匹配字符串类型控件成功
console.log(testTester({ type: 'string' } as ControlElement))

总结

完成渲染器条目注册后,JSONForms就能正确识别tester函数,解决当前错误。同时修复模板的组件引用问题,即可完成基础自定义文本渲染器的构建。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:35:19