3

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

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

示例代码:

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
4

2 回答 2

4

我猜你错过super initialize了父组件中的一些内容。

我也建议你不要这样工作。

MyParentComponent>>child一个

  ^ child ifNil: [ child := MyChildComponent new ]

另外,不要做 a html render: childbut html render: self child。这样您就可以轻松地交换组件。

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

于 2013-10-09T13:38:54.667 回答
1

经过一番试验,我发现了问题所在。在其中一种呈现方法中,我在每次呈现页面时创建一个新组件,而不是重用在该initialize方法中创建的组件。

另一个组件用于导航,我根据选择的菜单设置要显示的主要组件。

显然,修改状态在 Seaside 中并不违法。

于 2013-10-10T05:25:45.473 回答