4

我今天使用 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);
}

我得到这样的东西(注意滚动条拇指有多小):

很多图片

有什么想法吗?

4

1 回答 1

3

您的 html 结构和插入新内容的 after 选择器存在递归问题。

您插入新内容的选择器是

#462popular .image

这意味着htmlid 为 #462popular 的元素内的每个具有 image 类的元素之后都会插入 的内容。

在您插入的 html 中,您有一个类名为 image 的元素,这意味着您每次通过循环时都会将元素的数量与 #462popular 中的图像类相乘。

:)

于 2011-02-13T03:29:12.103 回答