4
  • 我有一个带有包含字符串的变量的对象。
  • 我有一个包含 LabelMorph/TextMorph(或其他显示文本的 Morph?)的窗口。

如何将 LabelMorph/TextMorph 绑定到变量,以便在变量中的字符串更改时标签更新?

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

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

4

3 回答 3

7

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

UpdatingStringMorph on: self selector: #myLabel

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

于 2013-03-20T21:34:27.080 回答
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. 
于 2013-03-21T21:54:55.590 回答
1

Depends on what you want to achieve. You might want to take a look at a way to do it with Glamour in a current Moose image. In a workspace, do-it:

GLMBasicExamples new magritte openOn: GLMMagrittePersonExample sampleData 

That shows how to work with announcements on save. The earlier examples are a better way to start understanding how to work with Glamour (and because of the way the examplebrowser is build, the Magritte example doesn't update the list when it is nested):

GLMBasicExamples open

That has several other examples that update on change.

于 2013-03-21T10:34:19.330 回答