2016-01-20 147 views
-3

我有了这个代码在AS3如何只显示数组中包含的特定数量的项目?

var products:Array; 
var list:Sprite = new Sprite(); 
function complete(e:Event):void { 
    addChild(list); 
    products = JSON.parse(loader5.data) as Array; 
    for(var i:int = 0, l:int = products.length - 1; l >= 0; i++, l--){ 
    createListItem(i, products[l]); 
     if(products.length >=10){ 
      next.visible=true; 
     } 
} 
    showList(); 
} 

它显示的所有产品的列表包含在我的表的数据库。

现在我加了if(products.length >=10){它工作。

我想补充

`if(products.length >=10){` 
What shoud I put here for showing only 10 products. 
next.visible=true; 
next.addEventListener(MouseEvent.CLICK, show10Next); 
} 

function show10Next(event:MouseEvent){ 
What should I put here for showing the 10 next products ? 
} 

--------------------------------- ---------------------------------------- 编辑

随着亚伦的回答,这里是我所做的:

function complete(e:Event):void { 
    addChild(list); 
    products = JSON.parse(loader5.data) as Array; 
    feedbackText.text = "complete"; 
    showNext() ; 
} 
function showNext():void { 
    var currentNumShowing:int = list.numChildren; 
    var nextNumShowing:int = Math.min(currentNumShowing + 10, products.length); 
    for(var i:int = currentNumShowing; i < nextNumShowing; i++){ 
     createListItem(i, products[i]); 
    } 
    next.visible = nextNumShowing < products.length; 
} 

那么现在我该如何添加next.addEventListener(MouseEvent.CLICK,next10);

(我不能这样做,因为next.addEventListener(MouseEvent.CLICK,showNext);showNext没有的MouseEvent ...)

其次,我的代码是从最终产品显示开始(for(var i:int = 0, l:int = products.length - 1; l >= 0; i++, l--){。我怎样才能保持呢?

我已经试过:for(var i:int = currentNumShowing, l:int = products.length - 1; i <nextNumShowing;l>= 0; i++, l--){ 但它不工作(错误1084 rightparen预计分号之前和期待rightparen之前分号)

+0

什么是downvote?这是一个合法的问题(这个问题已被要求在这里的PHP:[链接](http://stackoverflow.com/questions/1571427/returning-first-x-items-from-array)]或在这里[链接]( http://stackoverflow.com/questions/1921421/get-the-first-element-of-an-array)但从来没有要求过AS3 – cocoGeek

+0

不明原因的反对票很讨厌和无益,我认为你的问题不是很清楚。你想加载所有的产品,并且一次只显示* 10吗?或者你一次从你的服务器加载10个? – Aaron

+0

Thx为解释。我的意思是“加载所有产品,只显示10一个时间“(如果可能的话)。 – cocoGeek

回答

0

如果你想要做的是在同一时间从products阵列显示10个,你可以科瑞EA函数来显示该数组像这样的一个切片:

const itemsPerPage:uint = 10; 

var currentPageIndex:int = 0; 

function displayPage(pageIndex:int):void { 
    list.removeChildren(); 

    currentPageIndex = pageIndex; 

    var firstItemIndex:int = pageIndex * itemsPerPage; 
    var lastItemIndex:int = Math.min(firstItemIndex + itemsPerPage, products.length - 1); 
    for(var i:int = firstItemIndex; i <= lastItemIndex; i++){ 
     createListItem(i - firstItemIndex, products[i]); 
    } 
    next.visible = lastItemIndex < products.length - 1; 
} 

然后从你的complete处理程序,你可以在第一页显示是这样的:

displayPage(0); 

next按钮就可以有一个点击处理程序,显示currentPageIndex + 1,像这样:

next.addEventListener(MouseEvent.CLICK, nextClick); 
function nextClick(e:MouseEvent):void { 
    displayPage(currentPageIndex + 1); 
} 

同样,你可以displayPage(currentPageIndex - 1)回去的页面。

如果你想从年底到数组的开头显示,我建议你只reverse itproducts.reverse()

注意,如果你的数据是巨大的,只是加载JSON可能需要一段时间。在这种情况下,您应该将您的JSON数据本身分页到一次只能加载10个数据。

+0

Thx;所以我在我的JSON'complete'处理程序中添加了'showNext()'。但我不能在我的下一个按钮上调用相同的函数,因为它需要1个参数'event:MouseEvent'(因为它是一个按钮..)。那么每次点击“下一步”时怎么能调用这个函数呢? – cocoGeek

+0

我编辑了我的第一篇文章。 – cocoGeek

+0

完美:Thx。但是,只有一件事......我该如何以不同的顺序显示产品? (结束到开始)Thx – cocoGeek