首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XBL控件的属性

XBL控件的属性
EN

Stack Overflow用户
提问于 2015-01-26 15:54:14
回答 1查看 221关注 0票数 1

我有我的自定义XBL控件,比如说:

代码语言:javascript
复制
<fr:my-control id="my-control-id" attr1 = "value1 value2 value3" attr2 = "aaa" ../>

在我的XBL中,我将处理程序和attr1定义为xf:select

代码语言:javascript
复制
<xbl:handlers>
    <xbl:handler event="my-custom-event" phase="target">
            <xf:send submission="my-submission"/>   
 </xbl:handler>
...
<xf:select ref="@subOn">

dialog.control.details中,我添加了:

代码语言:javascript
复制
<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>

因此,我可以通过单击控件设置中的复选框来选择loadsave。现在,我只想在attr1包含特定单词f.e的情况下发送一些事件。

代码语言:javascript
复制
<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有:

代码语言:javascript
复制
<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>

代码语言:javascript
复制
<xf:input ref="@attr1"/>

这个处理程序捕获my-custom-event,然后发送my-submission。它是在xbl:template之外完成的。

3我只想发送这样的意见书只有当attr1 = "save"

我试过这样做:

代码语言:javascript
复制
<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>

这样,提交就不会被发送。此外,我只尝试向提交添加条件,如下所示:

代码语言:javascript
复制
<xf:submission id="my-submission" 
        if="contains(normalize-space($attr1), 'save')"
        ...>
</xf:submission>

具有讽刺意味的是,无论attr1实际上是什么,总是以这种方式发送提交。

不管用,我也不知道为什么。代码似乎是正确的,但显然肯定有问题。

EN

回答 1

Stack Overflow用户

发布于 2015-01-27 02:18:17

从XForms中,您不能访问DOM中另一个元素的值,因此在本例中,您不能从“fr:my-control外部”访问它的attr1属性的值。另一方面,XBL组件的实现当然可以访问其属性值。最简单的方法是在XBL控件中声明一个变量,例如:

代码语言:javascript
复制
<xf:var name="attr1-attribute" xbl:attr="xbl:text=attr1"/>

然后,您可以在控件$attr1中使用引用attr1属性值。您是否可以在XBL组件中移动该逻辑,即只有在xf:send的情况下才执行$attr1 = 'save'

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28153693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档