如何在xforms-submit-error事件中获取提交的唯一名称标识
解答
直接在事件上下文中调用event('target-id')就能拿到触发xforms-submit-error的提交组件id,这就是你需要的提交唯一标识。
这个属性是XForms标准内置的事件属性,事件冒泡到上层模型时不会丢失,完全适配你当前给主模型绑定全局监听器、统一捕获所有提交错误的实现,不需要给每个提交单独绑定事件处理逻辑。
你只需要把代码中name字段赋值位置的占位符THIS_IS_WHAT_I_WANT替换为event('target-id')即可完成该字段的填充。
另外你现有代码存在两处会导致赋值失效的问题,需要同步修正:
- 后续三个
xf:setvalue的ref路径配置错误:你是将错误记录模板插入到了reponseList节点下,因此赋值路径需要和前面的name、error-type字段保持一致,指向新插入的第一条submission节点 - 模板中定义的
content-lenght节点存在拼写错误,正确写法为content-length
修正后的事件处理核心代码如下:
<xf:action observer="my-main-model" event="xforms-submit-error"> <xf:insert context="xxf:instance('my-error-instance')" ref="reponseList" origin="xxf:instance('my-error-template-instance')"/> <xf:setvalue ref="xxf:instance('my-error-instance')//submission[1]/name" value="event('target-id')"/> <xf:setvalue ref="xxf:instance('my-error-instance')//submission[1]/error-type" value="event('error-type')"/> <xf:setvalue ref="xxf:instance('my-error-instance')//submission[1]/status-code" value="event('response-status-code')"/> <xf:setvalue ref="xxf:instance('my-error-instance')//submission[1]/uri" value="event('resource-uri')"/> <xf:setvalue ref="xxf:instance('my-error-instance')//submission[1]/content-length" value="event('response-headers')[lower-case(name) = 'content-length']/value"/> <xf:setvalue ref="xxf:instance('my-error-instance')//submission[1]/body" value="event('response-body')"/> </xf:action>
如果你需要区分同一个提交id触发的多次不同调用,还可以搭配event('submission-serial')获取本次提交的序列号,两者组合即可作为单次提交调用的唯一标识。
内容的提问来源于stack exchange,提问作者David Dejmal
相关产品推荐
相关产品推荐

