我今天使用foreach得到了一些奇怪的行为。我有一个dataset
,它正在提取JSON文档。它的一部分是一个数组,我pick()
将其发送给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);
}
我得到这样的东西(注意滚动条拇指有多小):
有什么想法在这里发生了什么?
答案 0 :(得分:3)
您的html结构和后选择器有一个递归问题,无法插入新内容。
您插入新内容的选择器是
#462popular .image
这意味着html
的内容将插入到具有#462popular id的元素内的图像类的每个元素之后。
在您插入的html中,您有一个带有图像类名称的元素,这意味着每次进行循环时,您都会将元素的数量乘以#462popular中的图像类。
:)