当 basicLeafNode 包含 onClick 事件时,无法获取要执行的 XPages 工具栏 onItemClick 事件
Cannot get XPages toolbar onItemClick event to execute when basicLeafNode contains onClick event
我有一个带有两个 basicLeafNode 的工具栏,当它们被单击时我需要在其中调用一些 CSJS。为此,我将 CSJS 放在 basicLeafNode 的 onClick 事件中,但是当我这样做时,无论我 return 是真、假还是根本没有 return,event=[=13 的事件处理程序=] 不执行。如果我在 onClick 事件中删除 CSJS,则会执行 onItemClick。关于我在这里做错了什么有什么想法吗?
<xe:toolbar>
<xe:this.treeNodes>
<xe:basicLeafNode label="Back" submitValue="Back"></xe:basicLeafNode>
<xe:basicLeafNode label="Save & 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>
basicLeafNode
的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>
我有一个带有两个 basicLeafNode 的工具栏,当它们被单击时我需要在其中调用一些 CSJS。为此,我将 CSJS 放在 basicLeafNode 的 onClick 事件中,但是当我这样做时,无论我 return 是真、假还是根本没有 return,event=[=13 的事件处理程序=] 不执行。如果我在 onClick 事件中删除 CSJS,则会执行 onItemClick。关于我在这里做错了什么有什么想法吗?
<xe:toolbar>
<xe:this.treeNodes>
<xe:basicLeafNode label="Back" submitValue="Back"></xe:basicLeafNode>
<xe:basicLeafNode label="Save & 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>
basicLeafNode
的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>