Thread Rating:
  • 233 Vote(s) - 2.74 Average
  • 1
  • 2
  • 3
  • 4
  • 5
オプションの監視について
01-17-2012, 08:00 PM,
#1
オプションの監視について
あるインスタンスの、ある値の「変更」を監視したい場合、どのような方法がありますか?

目的はデバッグではなく、たとえば、あるCommandButton の enabled? をfalse にした際、
監視していたそのボタンのラベル自身が、自分の表示文字を切り替える、というような場合を考えています。

Observerを利用したり、コマンドボタンの継承クラスに同様の機能を実装することができることは理解していますが、
今回の目的は、既存のコードになるべく影響を出さないように、継承クラスなどはつくら渦に実現できればと思っています。

言い換えると、on-action などのイベントと同じように、「enable? の値が変わったら」という記述方法があるか、
というイメージになります。

register-options を利用して、下記のようなコードで実現できるのではと予想したのですが、
監視するオプションの指定方法が分かりません。

Code:
{def cb:CommandButton = {CommandButton label =  "押せます"}}
{do
{cb.register-options
   {proc { [CommandButton の enabeld? のオプションキー]:}void
        {if enabled? == true then
              set cb.label = "押せます"
          else
              set cb.label = "押せません"
         }
    }
}
{value cb}

{CheckButton
{on ValueChanged at chb:CheckButton do
     set cb.enabled? = chb.value
   }
}




Reply
01-18-2012, 11:10 AM, (This post was last modified: 01-18-2012, 04:04 PM by c-s.)
#2
RE: オプションの監視について
register-optionsがcallback的じゃなくて、そう使えませんね。

非ローカルなら、option-childを追加して、そこから監視出来るでしょう?
Reply
12-04-2012, 02:16 PM,
#3
RE: オプションの監視について
とりあえず、option-changed を使って、こんな感じでできました。



Code:
{define-class public CustomCB {inherits CommandButton}
  {method public {option-changed key:String, value:any}:void
    {super.option-changed key, value }
    || enabled? と visible? を連動させる
    {if key == "enabled?" then
        set self.visible? = value asa bool
    }
  }
}

{let ccb:CustomCB = {CustomCB}}
{value ccb}
オプション enabled? の値に応じて visible? も設定される
{CheckButton
    label = "enabled? 切り替え",
    value = true,
    {on ValueChanged at chkb:CheckButton do
        set ccb.enabled? = chkb.value
    }
}
Reply

Forum Jump:


Users browsing this thread:
1 Guest(s)

MyBB SQL Error

MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1017 - Can't find file: 'mybb_threadviews' (errno: 2)
Query:
INSERT INTO mybb_threadviews (tid) VALUES('391')