我已经阅读过Alfresco文档以及wiki,但仍然不清楚:为Alfresco Share表单中的某个字段定义自定义验证处理程序的正确方法是什么?
问题是我在论坛中到处找到的方法总是覆盖MANDATORY类型,因此只有在字段设置为mandatory =“true”时才会调用验证处理程序。
<config evaluator="aspect" condition="my:aspect">
<forms>
<form>
<field-visibility>
<show id="my:property" />
</field-visibility>
<appearance>
<field id="my:property" mandatory="true">
<constraint-handlers>
<constraint type="MANDATORY" validation-handler="Alfresco.forms.validation.myValidator" event="keyup" />
</constraint-handlers>
</field>
</appearance>
</form>
</forms>
</config>
但是如何为非强制性字段定义自定义验证处理程序?或者,这是选择/覆盖的正确类型?我尝试了type="LENGTH",但是当用户在表单字段和字段中输入内容时,也不会调用它。
更新
我也从下面的评论中尝试了Andreas的建议,但是,验证处理程序没有被调用。这是我的xml和函数:
<field id="my:field" mandatory="false">
<constraint-handlers>
<constraint message-id="mandatory.field.empty.suffix" event="keyup,propertychange" validation-handler="Alfresco.forms.validation.metahead"/>
</constraint-handlers>
</field>
验证处理函数:
Alfresco.forms.validation.metahead = function FormEditMetadataWebWorkflowExt_metahead(field, args, event, form, silent, message)
{
console.log('metahead!');
return false;
}
以上验证函数不会随时调用,也不会在我更改字段的值或任何其他表单字段时调用。
接下来,当我在Alfresco论坛的某个地方阅读时,我尝试手动注册验证处理程序:
YAHOO.Bubbling.fire("registerValidationHandler",{fieldId: 'fieldIdOfMyField',handler: Alfresco.forms.validation.metahead, when: "onkeyup"});
但这只能部分起作用。它仅在任何其他(强制)表单字段更改时调用我的验证处理函数(这是正常的,因为当字段更改时整个表单验证发生),但不时我更改我自己的字段(“我的:字段”)的值。
(而且,为什么验证处理程序需要手动注册;我认为这是xml中约束配置的用途。)
答案 0 :(得分:0)
只需省略type属性,如下所示:
<constraint validation-handler="YourCompany.forms.validation.yourValidator" event="keyup" />
如果你的功能
YourCompany.forms.validation.yourValidator = function (field, args, event, form, silent, message)
{...}
返回false,显示的消息从消息资源(默认映射)解析为YourCompany.forms.validation.yourValidator.message
的值。