我試圖在動態生成的導航「節點」被點擊時傳遞變量的當前值。這隻需要一個整數,但它總是導致最後一個節點的值..已經嘗試了一些不同的方法來傳遞值,一個自定義事件監聽器,一個setter,但我懷疑這是一個封閉的問題..幫助將不勝感激;-)關閉問題? - 傳遞變量的當前值
function callGrid():void {
for (var i:Number = 0; i < my_total; i++) {
var gridnode_url = my_grid[i][email protected];
var news_category= my_grid[i][email protected];
var newstitle = my_grid[i][email protected];
var news_content = my_grid[i]..news_content;
var news_image = my_grid[i]..news_image;
var gridnode_loader = new Loader();
container_mc.addChild(gridnode_loader);
container_mc.mouseChildren = false;
gridnode_loader.load(new URLRequest(gridnode_url));
gridnode_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, gridLoaded);
gridnode_loader.name = i;
text_container_mc = new MovieClip();
text_container_mc.x = 0;
text_container_mc.mouseEnabled = false;
var textY = text_container_mc.y = (my_gridnode_height+18)*y_counter;
addChild(text_container_mc);
var tf:TextSplash=new TextSplash(newstitle,10,0,4);
container_mc.addChild(tf);
tf.mouseEnabled = false;
tf.height = my_gridnode_height;
text_container_mc.addChild(tf);
var text_container_mc_tween = new Tween(text_container_mc, "alpha", Strong.easeIn, 0,1,0.1, true);
gridnode_loader.x = (my_gridnode_width+5) * x_counter;
gridnode_loader.y = (my_gridnode_height+15) * y_counter;
if (x_counter+1 < columns) {
x_counter++;
} else {
x_counter = 0;
y_counter++;
}
}
}
function gridLoaded(e:Event):void {
var i:uint;
var my_gridnode:Loader = Loader(e.target.loader);
container_mc.addChild(my_gridnode);
_xmlnewstarget = my_gridnode.name;
//||||||||||||||||||||||||||||||||||||||||
//when a particular grid node is clicked I need to send the current _xmlnewstarget value to the LoadNewsContent function...
//||||||||||||| ||||||||||||||||||||||||
my_tweens[Number(my_gridnode.name)]=new Tween(my_gridnode, "alpha", Strong.easeIn, 0,1,0.1, true);
my_gridnode.contentLoaderInfo.removeEventListener(Event.COMPLETE, gridLoaded);
my_gridnode.addEventListener(MouseEvent.CLICK, loadNewsContent);
}
function loadNewsContent(e:MouseEvent):void {
createNewsContainer();
getXMLNewsTarget();
news_category = my_grid[_xmlnewstarget][email protected];
var tfnews_category:TextSplash=new TextSplash(news_category,20,16,32,false,false,0xffffff);
tfnews_category.mouseEnabled = false;
newstitle = my_grid[_xmlnewstarget][email protected];
var tftitle:TextSplash=new TextSplash(newstitle,20,70,24,false,false,0x333333);
news_container_mc.addChild(tftitle);
tftitle.mouseEnabled = false;
news_content = my_grid[_xmlnewstarget]..news_content;
var tfnews_content:TextSplash=new TextSplash(news_content,20,110,20,true,true,0x333333,330);
news_container_mc.addChild(tfnews_content);
tfnews_content.mouseEnabled = false;
news_image = my_grid[_xmlnewstarget][email protected]_image;
loadNewsImage();
addChild(tfnews_category);
addChild(tftitle);
addChild(tfnews_content);
var news_container_mc_tween = new Tween(news_container_mc, "alpha", Strong.easeIn, 0,1,0.3, true);
news_container_mc_tween.addEventListener(Event.INIT, newsContentLoaded);
}
所以總結:)範圍*而不是*變量,在Javascript中被「封閉」,只有一個新的函數聲明可以創建一個新的範圍。 – 2009-11-04 01:44:21
感謝格雷格關閉功能,這真的有幫助。我添加了代碼,確保類型轉換是正確的,併爲_xmlnewstarget變量添加了一個setter。我創造了完美的輪盤! 5個節點24130,01432,04312,02143,02143,14302,02143,21403,43021,24310,02143,14302,02143,43021 ...的最後值是_xmlnewstarget的最後一個值... – martin 2009-11-04 23:28:28
我設法通過一個不同的路線最終對此進行排序..我在xml中爲每個新聞項添加了一個新聞標識,並將其引用到文本容器中 - text_container_mc.id = my_grid [i]。@ id;然後我直接用text_container_mc.addEventListener(MouseEvent.CLICK,loadNewsContent)跳轉到loadNewsContent;然後在該函數中使用e.target.id鏈接文本字段 - newstitle = my_grid [e.target.id]。@ newstitle; 現在我只需要整理反向導航..但我認爲這個問題是排序;-)謝謝 – martin 2009-11-05 12:31:51