与父组件通信

时间:2014-02-08 21:37:17

标签: java tapestry

我有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?是否有类似“反向”参数(将子参数传递给父级)?

3 个答案:

答案 0 :(得分:4)

您的组件在页面中可用作变量,您可以在其中访问页面中所需的变量,如下所示:

@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
}

答案 1 :(得分:1)

您可以使用通常的挂毯参数。

<t:mycomponent value="myValue"/>

如果在组件方面更改此值,它将在容器侧可用,反之亦然。

答案 2 :(得分:0)

我根据具体情况使用了所有这三种方法。我通常更喜欢事件冒泡,这是有道理的。