2つのスクリプトコントロールがあり、一方はもう一方を保持し、次を使用して親の子からのイベントを正常に処理できました。
initialize: function()
{
this._autoComplete = $get(this._autoCompleteID);
this._onAutoCompleteSelected = Function
.createDelegate(this, this.handleAutoCompleteSelected);
var autoControl = this._autoComplete.control;
autoControl.addItemSelected(this._onAutoCompleteSelected);
...
}
addItemSelected(子上)は次のとおりです。
addItemSelected: function(handler)
{
list = this.getEvents();
list.addHandler('userItemSelected', handler);
},
getEventsは次のとおりです。
getEvents: function()
{
if (this._events == null)
{
this._events = new Sys.EventHandlerList();
}
return this._events;
},
問題は、親を処分するときに、同じことをしたいということです。
dispose: function()
{
var autoControl = this._autoComplete.control;
autoControl.removeItemSelected(this._onAutoCompleteSelected);
...
}
しかし、.controlはもう存在しません。これは、子コントロールが既に破棄されているため、.controlプロパティが機能しなくなったためだと思います。
これに照らして、子のイベントリストを実行し、その中のすべてのイベントハンドラーを削除することにしました。
dispose: function()
{
list = this.getEvents();
for(var item in list._list)
{
var handler;
handler = list.getHandler(item);
list.removeHandler(item, handler);
}
....
}
これを行うためのより良い方法はありますか?