2011-02-13 106 views
4

我一直在使用一個foreach今天一些奇怪的行爲。我有一個dataset這是一個JSON文件。它的一部分是一個數組,我將其發送併發送給foreach。這是我的全局塊:奇怪的KRL foreach行爲

global { 
    dataset appserver <- "http://imaj-app.lddi.org:8010/list/popular" cachable for 1 hour; 
    popular = appserver.pick("$..images") 
} 

首先有一條規則設置頁面。它看起來像這樣:

rule setup { 
    select when web pageview "www\.google\.com" 

    pre { 
    imagelist = << 
     <div id="462popular" style="margin-left:auto;margin-right:auto;width:450px"> 
     <p>Popular images from the CS 462 <a href="http://imaj-web.lddi.org/">Image Project</a></p> 
     <span class="image"></span> 
     </div> 
    >>; 
    } 

    prepend('#footer', imagelist); 
} 

下面是無法運作的規則:

rule images { 
    select when web pageview "www\.google\.com" 
    foreach popular setting (image) 

    pre { 
    thumburl = image.pick("$..thumburl"); 
    viewurl = "http://imaj-web.lddi.org/view?imagekey=" + image.pick("$..imagekey"); 
    html = << 
     <span class="image"><a href="#{viewurl}"><img src="#{thumburl}" style="border:none"/></a></span> 
    >>; 
    } 

    after('#462popular .image', html); 
} 

我得到這樣的(注意捲動條是多麼小):

Lots of images

有什麼想法發生了什麼?

回答

3

您的html結構和後續選擇器插入新內容時存在遞歸問題。

你插入新內容選擇是

#462popular .image 

這意味着的html內容將用具有#462popular的ID的元素內的類圖像的每一個元素之後插入。

在你插入的html裏面,你有一個帶有圖像類名的元素,這意味着你在每次通過循環時將元素的數量與#462popular中的圖像類相乘。

:)

+0

哦,真不錯!我應該注意到了。 :) – 2011-02-13 03:31:44