これは私を狂ってしまいます。 removeEventListenersが機能しないのはなぜですか?as3 removeEventListenerが機能しない
クラスのコンストラクタ
public function item(brand:String, title:String, price:Number, mp:Number,
path:String, sb1:*, sb2:*):void
SB1:*とSB2:*オブジェクトのフックです。
これらはリスナーに割り当てられます。この関数が呼び出され
_sb1.addEventListener("Changed", slideBarChanged); // Price
_sb2.addEventListener("Changed", slideBarChanged); // MegaPixels
を:
private function slideBarChanged(e:Event):void
{
switch(e.target.type)
{
case "Price":
if(int(e.target.currVal) > Math.abs(this.price))
{
this._active = false;
_sb2.removeEventListener("Changed", slideBarChanged);
}
else {
this._active = true;
_sb2.addEventListener("Changed", slideBarChanged);
}
break;
case "MegaPixels":
if(int(e.target.currVal) > Math.abs(this.mpixels))
{
this._active = false;
_sb1.removeEventListener("Changed", slideBarChanged);
}
else {
this._active = true;
_sb1.addEventListener("Changed", slideBarChanged);
}
break;
}
Everthingは動作しますが、アイテムが偽= _activeなったときにリスナーが削除されません。 これは実際には次のようになります。
価格が高すぎる場合は、メガピクセルを無視して価格だけを聞いてください。 メガピクセルが高すぎる場合は、価格を無視してメガピクセルだけを聞きます。
私の脳を壊す、どんな助けも大歓迎です。 Thanx。
私は最初にするべきことは機能を分離することだと思います。 megapixelChangeとpriceChange関数があります。また、1つの "this._active"しかありません。どちらがアクティブかどうかをどのように知っていますか?適切な "removeEventListener"に届かないケースステートメントで何かになる可能性があります – Glenn
オブジェクトフックの新しいインスタンスを作成して_sb1と_sb2に割り当てますか? – Allan