我有一个如下所示的实例:
<root>
<switch ID="1">
<foo/>
<bar/>
</switch>
<switch ID="2">
<foo/>
<bar/>
</switch>
</root>
我尝试创建一个向switch元素添加enabled
属性的触发器。我一直在使用类似下面的内容向交换机添加新的子节点,但据我所知,同样的方法不能仅添加属性。此触发器位于xf:repeat
块中,并且在&#34; bar&#34;已为特定开关添加了元素:
<xf:trigger ref=".[not(bar)]">
<xf:label>Add "bar" Element</xf:label>
<xf:insert ev:event="DOMActivate" context="../switch[index('switch-repeat')]"
nodeset="foo" at="foo" position="after"
origin="instance('presets')/bar"/>
</xf:trigger>
我一直在考虑将switch元素的内容复制到另一个带有enabled属性的实例中,比如<switch enabled="true/>
,然后用原来的替换原来的,但这似乎有点迂回任务,我可能必须做同样的事情来保留ID属性。
答案 0 :(得分:0)
XForms 1.1不允许创建元素或属性,只是从其他地方复制它。
XForms 2.0可以。实现可能已经有了自己的扩展。
答案 1 :(得分:0)
在Alain的评论的指导下,我在XForms标准中找到了this mention,用于将属性列表复制到元素中。这正是我希望的方式。
我用来添加属性的代码如下:
<xf:trigger ref=".[not(@enabled)]">
<xf:label>Add "enabled" attribute</xf:label>
<xf:insert ev:event="DOMActivate" context="../switch[index('switch-repeat')]"
origin="instance('presets')/switch/@enabled"/>
</xf:trigger>
其中instance('presets')/switch
为<switch enabled="true"/>
。