4

今日、foreach を使用すると、奇妙な動作が発生します。datasetJSON ドキュメントを取り込む があります。その一部は配列であり、これをpick()foreach に送信します。これが私のグローバルブロックです:

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

まず、ページを設定するルールが 1 つあります。次のようになります。

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

htmlこれは、 #462popular の ID を持つ要素内のイメージのクラスを持つすべての要素の後に、 の内容が挿入されることを意味します。

挿入する html 内には、image というクラス名の要素があります。これは、ループを通過するたびに #462popular 内の image のクラスで要素の数を乗算していることを意味します。

: )

于 2011-02-13T03:29:12.103 に答える