当basicLeafNode包含onClick事件时,无法获取XPage工具栏onItemClick事件

时间:2016-06-16 19:10:18

标签: xpages xpages-extlib

我有一个带有两个basicLeafNodes的工具栏,我需要在点击它们时调用一些CSJS。为此,我将CSJS放在basicLeafNode的onClick事件中,但是当我这样做时,无论我是返回true,false还是根本没有返回,event =“onItemClick”的eventHandler都不会执行。如果我在onClick事件中删除CSJS,则执行onItemClick。关于我在这里做错了什么想法?

<xe:toolbar>
    <xe:this.treeNodes>
        <xe:basicLeafNode label="Back" submitValue="Back"></xe:basicLeafNode>
        <xe:basicLeafNode label="Save &amp; Back" submitValue="SaveAndBack" loaded="${javascript:document1.isEditable()}" onClick="console.log('save and back clicked');"></xe:basicLeafNode>
        <xe:basicLeafNode label="Edit" submitValue="Edit" loaded="${javascript:!(document1.isEditable())}"></xe:basicLeafNode>
        <xe:basicLeafNode label="Save" submitValue="Save" loaded="${javascript:document1.isEditable()}" onClick="console.log('save clicked'); return true;"></xe:basicLeafNode>
        <xe:basicLeafNode label="Delete"></xe:basicLeafNode>
    </xe:this.treeNodes>
    <xp:eventHandler event="onItemClick" submit="true" refreshMode="partial" refreshId="dc" disableValidators="#{javascript:context.getSubmittedValue() == 'Back'}">
        <xe:this.action>
            <![CDATA[#{javascript:
            vendor.runAction(context.getSubmittedValue(), document1);
        }]]></xe:this.action>
    </xp:eventHandler>
</xe:toolbar>

1 个答案:

答案 0 :(得分:1)

basicLeafNode&#39> onClick 事件覆盖 toolbar onItemClick 事件。

这在呈现的页面源中可见。

只需转过身即可:将您的客户端操作添加到toolbar onItemClick 事件中。

您可以使用

获取点击的标签
        var node = thisEvent.target.parentNode;
        var label = node.getElementsByClassName('dijitButtonText')[0].innerHTML;

并根据点击的标签添加您的代码。

这是一个有效的XPage示例:

<?xml version="1.0" encoding="UTF-8"?>
<xp:view
    xmlns:xp="http://www.ibm.com/xsp/core"
    xmlns:xe="http://www.ibm.com/xsp/coreex">
    <xe:toolbar>
        <xe:this.treeNodes>
            <xe:basicLeafNode
                label="first"
                submitValue="first">
            </xe:basicLeafNode>
            <xe:basicLeafNode
                label="second"
                submitValue="second">
            </xe:basicLeafNode>
        </xe:this.treeNodes>
        <xp:eventHandler
            event="onItemClick"
            submit="true"
            refreshMode="complete">
            <xe:this.script><![CDATA[
                var node = thisEvent.target.parentNode;
                var label = node.getElementsByClassName('dijitButtonText')[0].innerHTML;
                alert('action for: ' + label);
                return true;
            ]]></xe:this.script>
            <xe:this.action><![CDATA[#{javascript:
                    print(context.getSubmittedValue());
            }]]></xe:this.action>
        </xp:eventHandler>
    </xe:toolbar>
</xp:view>