我想要做的是创建一个自定义控件来确定它是否应该加载。所以我查看了自定义控件的加载属性,但它没有按照我预期的方式工作。它至少似乎忽略了这个属性。我整理了一个小测试控件来演示。
<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core" pageTitle="Test" loaded="false">
This is a test custom control.
</xp:view>
即使将load属性设置为false,也始终显示控件。我能做的就是将自定义控件放在我的页面上并在那里设置加载的属性。这工作正常,但我想避免每次使用控件时都设置该属性。我想把代码放在控件中,看它是否应该加载。
我错过了吗?
是的我知道我可以将所有内容放在控件上的div中而不加载div但是我根本不想加载控件,如果它不应该被加载。
答案 0 :(得分:1)
我不完全确定为什么加载的属性甚至可以在根元素上使用,因为它的作用本身就不可能在该级别进行评估。
与渲染相反,它决定是否将组件的任何表示发送给使用者,加载确定是否甚至创建了组件。因此,如果渲染为false,则它不会显示...如果loaded为false,则它甚至不存在。该组件需要存在才能对要评估的视图标记属性进行评估,因此要将其从现有文件中停止,因为它需要存在才能被告知不存在。
因此,为了使用load来抑制整个控件,需要在控件引用上设置属性。换句话说,将控件添加到XPage(或其他自定义控件)时,请在控件的标记上设置加载的表达式。如果计算结果为false,则永远不会加载控件。
请记住,所有这些最终都以Java形式执行...如果阻止构造类实例,则没有类实例来询问是否应该构造它。相反,如果你创建一个类实例,那么问它是否应该存在......太晚了,它已经存在了。如果自定义控件应该拥有其内容是否应该存在的逻辑,那么在单个子容器的loaded属性中指定该逻辑就是“正确”的方法。