- 我有一個包含一個字符串變量的對象。
- 我有一個窗口包含一個LabelMorph/TextMorph(或其他一些顯示文字的Morph?)。
如何將LabelMorph/TextMorph綁定到變量,以便標籤在變量中的字符串更新時進行更新?如何將LabelMorph/TextMorph綁定到變量,以便Morph反映變量的變化?
- 經典的Smalltalk-80依賴/更改/更新機制?
- Pharo公告框架?
- 有什麼不同?
我該怎麼做?我應該使用哪種Morph?
如何將LabelMorph/TextMorph綁定到變量,以便標籤在變量中的字符串更新時進行更新?如何將LabelMorph/TextMorph綁定到變量,以便Morph反映變量的變化?
我該怎麼做?我應該使用哪種Morph?
取決於你想達到的目標。 你可能想看一下在目前的駝鹿形象中用Glamour做到這一點的方法。 在工作區,做它:
GLMBasicExamples new magritte openOn: GLMMagrittePersonExample sampleData
這顯示瞭如何在節省公告工作。前面的例子是一個更好的方式開始瞭解如何與魅力的工作(而且由於examplebrowser是建立,當它是嵌套馬格利特例子不更新列表的方式):
GLMBasicExamples open
這已其他幾個更新變化的例子。
最簡單的方法是使用一個更新字符串變形:
UpdatingStringMorph on: self selector: #myLabel
這將發送#myLabel(或任何其他消息),自(或任何其它對象),並顯示它。
這是本傑明·範·Ryseghem上的Pharo郵件列表提供了一個解決方案:
對於這種情況,我的解決辦法是使用而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.
謝謝你,我開始學習文檔和例子。這很有趣。 – MartinW 2013-03-21 19:45:12