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

Survey Creator自定义PanelModel类报错:TypeError: e.isDefaultRendering is not a function

问题分析与解决方案

错误Uncaught (in promise) TypeError: e.isDefaultRendering is not a function的核心原因是:你声明自定义类时继承的是Survey.Question,但你实际想要继承的是PanelModel——isDefaultRendering是PanelModel类的专属方法,Question类并不包含该方法,导致Survey Creator渲染组件时找不到对应方法报错。

以下是修正后的完整实现代码:

const creatorOptions = {
  showLogicTab: true,
  isAutoSave: true,
};

const creator = new SurveyCreator.SurveyCreator(creatorOptions);

// 改为继承Survey.PanelModel,确保拥有面板类的所有方法
class MyCustomClass extends Survey.PanelModel {
  getType() {
    return "my-custom-class";
  }
  get myCustomProperty() {
    return this.getPropertyValue("myCustomProperty");
  }
  set myCustomProperty(val) {
    this.setPropertyValue("myCustomProperty", val);
  }
}

Survey.ElementFactory.Instance.registerElement("my-custom-class", (name) => {
  return new MyCustomClass(name);
});

// Serializer父类参数从"question"改为"panel",匹配继承关系
Survey.Serializer.addClass(
  "my-custom-class",
  [{
    name: "myCustomProperty",
    category: "general",
    visibleIndex: 2
  }],
  function () {
    return new MyCustomClass("");
  },
  "panel"
);

creator.toolbox.addItem({
  name: "my-custom-class",      // 与getType()返回值保持一致
  title: "自定义面板", 
  iconName: "icon-panel",     // 使用面板类对应图标
  json: {
    type: "my-custom-class",
    name: "panelPersonalizado1",
    elements: []
  },
  isCopied: true              // 允许拖拽复制到问卷中
});

creator.render("surveyCreatorContainer");

关键修改说明

  • 继承类修正:将extends Survey.Question改为extends Survey.PanelModel,让自定义类继承面板类的所有属性与方法,包括缺失的isDefaultRendering。
  • 序列化器父类调整:Survey.Serializer.addClass的最后一个参数从"question"改为"panel",让SurveyJS的序列化系统正确识别自定义类的父类类型,继承面板的默认行为。
  • 标识一致性:确保getType()返回值、ElementFactory注册名、toolbox配置的name参数完全匹配,避免组件识别异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:37:03