0

コンテキストメニューから以下の関数を呼び出すと、グラフィックがクリアされます。呼び出しが別の関数内からのものである場合、そうではありません。なぜそれが機能しないのですか?

          function removeFrame(e:Event=null):void{
            holder.graphics.clear();
            }

        function cleanIt(e:Event=null):void{ 
        removeFrame() 
    } 
    // NOT working by calling it like this:
        cleanIt() 

// It's Working if I call the function directly from the right-click menu:
 menuitem1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,cleanIt);

ありがとう。ウリ

4

1 に答える 1

1

より多くのコードを表示できますか、関数はどのように呼び出されますか?これはイベントリスナー関数のように見えます。これにより、this意味の範囲が変わる可能性があります(つまりthis.holder)。関数をクラスレベルにすることができます:function removeFrame(e:Event=null):void{そしてそれをクラス内に持つことができます。より多くのコードを見ずに正確に伝えるのは難しいですが。

flaファイルで試しました

import flash.display.Sprite;
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;

var holder:Sprite = new Sprite();
holder.graphics.beginFill(0x443311,1);
holder.graphics.drawCircle(10,10,300);
addChild(holder);   
var cm:ContextMenu = new ContextMenu();
var menuitem1:ContextMenuItem = new ContextMenuItem("HAHA")
cm.customItems.push(menuitem1);
contextMenu = cm;

function removeFrame(e:Event=null):void{
    holder.graphics.clear();
}

function cleanIt(e:Event=null):void{ 
    removeFrame() 
}

cleanIt();
menuitem1.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,cleanIt);

両方でcleanIt機能します。何が起こっているのかを知るには、より多くの情報またはコードが必要です。

于 2012-04-07T17:38:00.440 に答える