我有我的自定义XBL控件,比如说:
<fr:my-control id="my-control-id" attr1 = "value1 value2 value3" attr2 = "aaa" ../>在我的XBL中,我将处理程序和attr1定义为xf:select。
<xbl:handlers>
<xbl:handler event="my-custom-event" phase="target">
<xf:send submission="my-submission"/>
</xbl:handler>
...
<xf:select ref="@subOn">在dialog.control.details中,我添加了:
<xf:select appearance="full" ref="if ($xforms-control/self::xf:select) then $bound-node else ()">
<xf:label>Send submission:</xf:label>
<xf:item>
<xf:label>On load</xf:label>
<xf:value>load</xf:value>
</xf:item>
<xf:item>
<xf:label>On save</xf:label>
<xf:value>save</xf:value>
</xf:item>
</xf:select>因此,我可以通过单击控件设置中的复选框来选择load和save。现在,我只想在attr1包含特定单词f.e的情况下发送一些事件。
<fr:my-control id="my-control-id" attr1 = "save" attr2="...">
if(contains(normalize-space($attr1), 'save') then
<xf:dispatch ev:event="my-custom-event" observer="fr-form-model" name="my-custom-event"
targetid="my-control-id"/>
</fr:my-control>我该怎么做?提前谢谢。
更新
我想说得很清楚,所以:
在表单生成器中生成的表单中的1有:
<fr:my-control id="my-control-id" attr1 = "save">
<xf:dispatch ev:event="my-custom-event" observer="fr-form-model" name="my-custom-event"
targetid="my-control-id"/>
</fr:my-custom-control>当用户单击Form中的“保存”按钮时,我将此<xf:dispatcher>放置为捕捉事件。targetid也有一个问题,我必须手动设置它,使其与fr:my-custom-control相同,但是还有另一个问题,它有自己的帖子。
XBL文件中的2 --我已经定义了处理程序
<xbl:handlers> <xbl:handler event="my-custom-event" phase="target"> <xf:send submission="my-submission"/> </xbl:handler> </xbl:handlers>
<xf:input ref="@attr1"/>这个处理程序捕获my-custom-event,然后发送my-submission。它是在xbl:template之外完成的。
3我只想发送这样的意见书只有当attr1 = "save"。
我试过这样做:
<xf:template>
<xf:var name="attr1" xbl:attr="xbl:text=attr1" >
<xf:action ev:event="xforms-enabled xforms-value-changed">
<xf:setvalue ref="instance('attr1')" value="$attr1"/>
</xf:action>
</xf:var>
<xf:model>
<xf:instance id="attr1"><value/></xf:instance>
<xf:group ref=".[contains(normalize-space($subOn), 'save')]">
<xf:submission id="my-submission" ..
..
</xf:submission>
</xf:group>
</xf:model>这样,提交就不会被发送。此外,我只尝试向提交添加条件,如下所示:
<xf:submission id="my-submission"
if="contains(normalize-space($attr1), 'save')"
...>
</xf:submission>具有讽刺意味的是,无论attr1实际上是什么,总是以这种方式发送提交。
不管用,我也不知道为什么。代码似乎是正确的,但显然肯定有问题。
发布于 2015-01-27 02:18:17
从XForms中,您不能访问DOM中另一个元素的值,因此在本例中,您不能从“fr:my-control外部”访问它的attr1属性的值。另一方面,XBL组件的实现当然可以访问其属性值。最简单的方法是在XBL控件中声明一个变量,例如:
<xf:var name="attr1-attribute" xbl:attr="xbl:text=attr1"/>然后,您可以在控件$attr1中使用引用attr1属性值。您是否可以在XBL组件中移动该逻辑,即只有在xf:send的情况下才执行$attr1 = 'save'?
https://stackoverflow.com/questions/28153693
复制相似问题