如何将LabelMorph / TextMorph绑定到变量,以便变形反映变量的变化?

时间:2013-03-20 20:42:51

标签: user-interface smalltalk pharo squeak morphic

  • 我有一个包含String的变量的对象。
  • 我有一个包含LabelMorph / TextMorph的窗口(或其他一些显示Text的Morph?)。

如何将LabelMorph / TextMorph绑定到变量,以便当变量中的String更改时标签会更新?

  • 经典的Smalltalk-80依赖/更改/更新机制?
  • Pharo公告框架?
  • 不同的东西??

我该怎么做?我应该使用哪种变形?

3 个答案:

答案 0 :(得分:7)

最简单的方法是使用更新字符串变形:

UpdatingStringMorph on: self selector: #myLabel

这会将#myLabel(或任何其他消息)发送给自己(或任何其他对象)并显示它。

答案 1 :(得分:2)

这是Benjamin Van Ryseghem在Pharo Mailinglist上提供的解决方案:

  

对于这种情况,我的解决方案是使用ValueHolder。   而不是将字符串直接存储在实例变量中,而是存储   它进入了ValueHolder。

我在工作区中尝试了这个:

|string label|

string := 'Wait till i change..' asValueHolder.
label := LabelMorph contents: string contents.
string whenChangedDo: [:newValue | label contents: newValue ].
label openInWindow.
[ 5 seconds asDelay wait. string value: 'I changed :)' ] fork. 

答案 2 :(得分:1)

取决于您想要实现的目标。 您可能想看看在当前Moose图像中使用Glamour的方法。 在工作区中,执行操作:

GLMBasicExamples new magritte openOn: GLMMagrittePersonExample sampleData 

这显示了如何在保存时使用公告。前面的示例是开始理解如何使用Glamour的更好方法(并且由于示例浏览器的构建方式,Magritte示例在嵌套时不更新列表):

GLMBasicExamples open

还有其他几个更新更新的示例。