Reputation: 5041
How do i bind the LabelMorph/TextMorph to the variable, so that the label updates when the String in the variable changes?
How would i do this? Which Morph should i use?
Upvotes: 4
Views: 725
Reputation: 5041
This is a solution provided by Benjamin Van Ryseghem on the Pharo Mailinglist:
For this kind of situation, my solution is to use a ValueHolder. Instead of storing your string directly in an instance variable, store it into the ValueHolder.
I tried this in a Workspace:
|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.
Upvotes: 2
Reputation: 15917
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.
Upvotes: 1
Reputation: 4633
Simplest is to use an updating String morph:
UpdatingStringMorph on: self selector: #myLabel
This will send #myLabel (or any other message) to self (or any other object) and display it.
Upvotes: 7