SurveyJS自定义属性:如何读取valueName设置初始值恢复下拉选中状态
解决Survey Builder自定义属性下拉框选中状态不恢复的问题
问题核心是你的自定义属性只实现了设置时同步到valueName,但没有实现从valueName反向同步回属性值,导致重新选中问题时,属性网格无法识别该选中哪个下拉选项。
只需要给domainAttributeProperty添加getValue方法,读取当前问题的valueName作为自定义属性的当前值即可:
import { SurveyModel } from 'survey-core'; let choicesOptions : string[] = []; export function setDomainAttributeChoices(choices: string[] ){ choicesOptions = choices; } export const domainAttributeProperty = { name: 'DomainAttributeProperty', category: 'general', choices: loadChoices, visibleIndex: 0, onSetValue: onSetValue, // 添加该方法,实现从valueName反向读取值 getValue: function(survey: SurveyModel) { return survey.getPropertyValue('valueName'); } } function loadChoices(obj: unknown, cb: Function) { cb(choicesOptions); } function onSetValue(survey: SurveyModel, value: string): void { survey.setPropertyValue('valueName', value); }
关键说明:
getValue是SurveyJS自定义属性的核心方法,当属性网格加载选中元素的属性时,会调用该方法获取属性当前值- 直接返回
valueName的值,就能让下拉框自动匹配对应选项并选中 - 配合已有的
onSetValue,实现自定义属性与valueName的双向同步
修改后,重新选中问题时,下拉框会自动选中与当前valueName匹配的选项。
内容的提问来源于stack exchange,提问作者thomaux
相关产品推荐
相关产品推荐

