0

そのため、XML ファイルから動的にロードされ、非常にうまく機能するオプションを含むメニューがあります。いずれも、MouseOver 用の eventListeners がアタッチされており、これも優れています。私が問題を抱えている場所は、そのオプションに適切なコンテンツをロードする Click eventListener をそれぞれに追加する必要があることです。各オプションは、そのオプションに指定されたアドレスに従って可変コンテンツを含む同じページをロードする必要があります。XML ファイル内の各オプションでリストされたアドレスを取得し、それらを配列にプッシュしました。それらを参照するオプションを取得する方法に頭を悩ませることはできません。これまでの私のコードは次のとおりです。

var blogData:XMLList;
var blogTotal:Number;

var entryTitle:String;

//Arrays
var entriesArray:Array = new Array();
var entryAddr:Array = new Array();

var blogListLoader: URLLoader = new URLLoader();
blogListLoader.load(new URLRequest("BlogEntries.xml"));
blogListLoader.addEventListener(Event.COMPLETE, loadBlogList);

function loadBlogList(e:Event):void
{
    var blogList:XML = new XML(e.target.data);
    blogData = blogList.ENTRY;
    blogTotal = blogData.length();
}


function loadBlogEntries():void
{
    //Load entriesArray
    var yTmp:Number = 0;
    for (var i:Number = 0; i < blogTotal; i++)
    {
        var entryName = blogData[i].@TEXT;
        var entry:TextField = new TextField();
        entriesArray[i] = entry;
        entriesArray[i].textColor = 0x0DAC54;
        entriesArray[i].x = 0;
        entriesArray[i].y = yTmp;
        entriesArray[i].width = 1031;
        entriesArray[i].height = 90.30;
        entriesArray[i].embedFonts = true;
        entriesArray[i].antiAliasType = AntiAliasType.ADVANCED;
        entriesArray[i].defaultTextFormat = listformat;
        entriesArray[i].selectable = false;
        entriesArray[i].wordWrap = true;
        entriesArray[i].text = entryName;
        entriesArray[i].autoSize = TextFieldAutoSize.LEFT;
        entriesArray[i].addEventListener(MouseEvent.MOUSE_OVER , bEntryOvr);
        entriesArray[i].addEventListener(MouseEvent.CLICK , bEntryClick);
        BlogPage.blogEntriesPage.entryList.addChild(entriesArray[i]);
        yTmp = yTmp + 149;

        var Addr = blogData[i].@ADDR;
        entryAddr[i] = Addr;
    }
}

function bEntryOvr(event:MouseEvent):void
{
    event.target.backgroundColor = 0x0DAC54;
    event.target.background = true;
    event.target.textColor = 0x000000;
    event.target.addEventListener(MouseEvent.MOUSE_OUT , bEntryOut);
}

function bEntryOut(event:MouseEvent):void
{
    event.target.background = false;
    event.target.textColor = 0x0DAC54;
    event.target.removeEventListener(MouseEvent.MOUSE_OUT , bEntryOut);
}

function bEntryClick(event:MouseEvent):void
{
    showPage = BlogPage.blogEntriesPage.blogEntry;
    flashup();
}

おそらくそれほど難しいとは思いませんが、今は頭がいっぱいです。どんな洞察も高く評価されます。ありがとう、-T。

4

1 に答える 1

1

クロージャーを使用できます:

entriesArray[i].addEventListener(MouseEvent.CLICK, makeEntryClick(index));
function makeEntryClick(index:Number):Function {
    return function (event:MouseEvent):void {
        bEntryClick(event, index);
    };
}

function bEntryClick(event:MouseEvent, index:Number):void {
    // ...
}

後でハンドラーを削除する必要がある場合は、 を渡すことができますarguments.callee

于 2012-07-06T22:56:39.947 に答える