我有MyPage.tml页面和MyComponent.tml组件。
<html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd">
<body>
<t:mycomponent />
</body>
</html>我需要根据在MyPage中发生的事情在MyComponent上显示一些数据。如何使MyComponent中的一些数据可供MyPage使用?是否存在类似于“反向”参数(子传递参数给父级)的内容?
发布于 2014-02-09 14:11:25
您的组件可作为变量在您的页面中使用,您可以在其中访问页面中所需的变量,如下所示:
@Component(id = "myComponent")
private MyComponent myComponent;
@SetupRender //or any other render event method
private void setup() {
Object compVariable = myComponent.getYourVariable();
}如果您问我,更优雅的做法是使用事件冒泡,因为如果需要,可以更容易地将一些逻辑重构到更深的组件中。
构成部分:
@Inject
private ComponentResources resources;
@SetupRender //or any other lifecycle event method
private void triggerEvent() {
Object yourVariable = new Object();
resources.triggerEvent("YOUR_EVENT_NAME", new Object[]{yourVariable}, null);
//add an event callback if needed where I use null here
}页面:
@OnEvent(value = "YOUR_EVENT_NAME")
private void handleComponentEvent(Object yourVariable) {
//do something with yourVariable
//even return something which would then can be handled by your component callback handler
}发布于 2014-02-09 07:40:44
您可以使用常规的tapestry参数。
<t:mycomponent value="myValue"/>如果该值将在组件端更改,则该值将在容器端可用,反之亦然。
发布于 2014-02-09 14:41:25
我使用了所有这三种方法,这取决于上下文。我通常更喜欢事件冒泡,在那里这是有意义的。
https://stackoverflow.com/questions/21652109
复制相似问题