- 文字列を含む変数を持つオブジェクトがあります。
- LabelMorph / TextMorph(またはテキストを表示する他のモーフ?)を含むウィンドウがあります。
LabelMorph / TextMorphを変数にバインドして、変数の文字列が変更されたときにラベルが更新されるようにするにはどうすればよいですか?
- 従来のSmalltalk-80依存/変更/更新メカニズム?
- ファロアナウンスフレームワーク?
- 何か違います??
どうすればいいですか?どのモーフを使用する必要がありますか?
LabelMorph / TextMorphを変数にバインドして、変数の文字列が変更されたときにラベルが更新されるようにするにはどうすればよいですか?
どうすればいいですか?どのモーフを使用する必要がありますか?
最も簡単なのは、更新する文字列モーフを使用することです。
UpdatingStringMorph on: self selector: #myLabel
これにより、#myLabel(またはその他のメッセージ)がself(またはその他のオブジェクト)に送信され、表示されます。
これは、PharoメーリングリストのBenjaminVanRyseghemによって提供されたソリューションです。
このような状況では、私の解決策は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.
何を達成したいかによります。現在のMoose画像でGlamourを使用してそれを行う方法を確認することをお勧めします。ワークスペースで、次のことを行います。
GLMBasicExamples new magritte openOn: GLMMagrittePersonExample sampleData
これは、保存時にアナウンスを操作する方法を示しています。前の例は、Glamourの操作方法を理解し始めるためのより良い方法です(そして、examplebrowserの構築方法のため、Magritteの例はネストされたときにリストを更新しません):
GLMBasicExamples open
これには、変更時に更新される他のいくつかの例があります。