从另一个组件修改组件的状态

时间:2013-10-09 10:38:05

标签: smalltalk pharo seaside

我正在尝试从回调中的父组件设置子组件的实例变量。使用调试器我可以看到在回调中正确设置了实例变量,但在渲染子组件时,子组件并不反映所做的更改。

那么,从海边的另一个组件修改组件的状态是否违法,或者我做错了什么?

示例代码:

MyParentComponent>> initialize
    super initialize.
    child := MyChildComponent new.

MyParentComponent>> renderContentOn: html 
  html render: child.   
  html anchor
     callback: [ 
        child property: 'Something'.
    ] ; with 'Navigate'.

MyParentComponent>> children 
  ^ Array with: child

2 个答案:

答案 0 :(得分:4)

我猜错了父组件中的一些super initialize

我还建议你不要这样做。

使用

执行MyParentComponent>>child
  ^ child ifNil: [ child := MyChildComponent new ]

另外,不要html render: child而是html render: self child。 这样你就可以轻松交换组件。

这样你就可以确定孩子已经正确初始化了。

答案 1 :(得分:1)

经过一番实验,我发现了问题。在其中一种渲染方法中,我每次渲染页面时都会创建一个新组件,而不是重复使用initialize方法中创建的组件。

其他组件用于导航,我根据所选菜单设置要显示的主要组件。

显然,修改国家在Seaside并非违法。