2015-12-14 82 views
0

請原諒我以前從未使用Apache Velocity,但我必須弄清楚這一點!Apache Velocity和添加JavaScript

我使用產品的土坯推薦模板,現在我加入了星級系統成其爲下面的圖片中指出:

star rating image

但是,正如你所看到的邏輯我已經添加(在JS中)只是第一次執行。並且顯然沒有通過循環,因爲它在Velocity中。

我對社區的問題是;我如何去做這項工作?

我已經嘗試了一天現在無濟於事,所以任何幫助將不勝感激。

請參閱下面的代碼! (和感謝!)

[該#foreach循環是速度,和腳本標籤之間的一切都是我的附加碼]

<div class="line"> 
<h2>More for You</h2> 

#set($count=1) 

     #foreach($e in $entities) 
     #if($e.id != "" && $count < $entities.size() && $count <=18) 
      <li> 
      <script type="text/javascript"> 

       var myString = $e.rating; 
       if (myString >= 5) { myString = 5;} 

       var myRegexp2 = /\d(?!.*\d)/; 
       var match2 = myRegexp2.exec(myString); 
       var starIMG = "<img src='http://kirklands.ugc.bazaarvoice.com/3768-en_us/" + match + "_" + match2 + "/5/rating.gif' alt='' />"; 

       var myRegexp3 = /\d/; 
       var match = myRegexp3.exec(myString); 

       function myFunction() { 
     return(match); 
      } 

      </script> 
      <a class="productBlock" onclick="var s = s_gi(s_account); 
      s.linkTrackVars='events,eVar21'; 
      s.linkTrackEvents='event16'; 
      s.events='event16'; 
      s.eVar21=''; 
      s.tl(this,'o','Product Detail Cross-Sell');" href="$e.pageUrl?icid=hpFS "> 
       <img title="$e.name" alt="$e.name" src="$e.thumbnailUrl"> 
       <h3>$e.name</h3> 
       <div id="starRating"><script>document.getElementById("starRating").innerHTML = 
       starIMG;</script></div> 
       <p>$$e.value</p> 
      </a> 

      </li> 
     #set($count = $count + 1) 
     #end 
    #end 
    </ul> 
</div> 
<div class="scroolBtn btnRight"><span class="btn" id="scrool-forward"></span></div> 
</div> 
jQuery(function(){ jQuery('#scrool')。scr ollbox('h', switchItems:3, distance:450, autoPlay:false }); ('#scrool-backward')。click(function(){jQuery('#scrool')。trigger('backward'); }); ('#scrool-forward')。click(function(){jQuery('#scrool')。trigger('forward'); }); });

回答

0

我還沒有使用Velocity模板腳本多年,但瘋狂的猜測是一個轉義問題。速度模板中包含的所有內容實際上都是由Velocity引擎運行的,您必須轉義$ variable文字。

http://velocity.apache.org/engine/devel/user-guide.html#escapingvalidvtlreferences

編輯不等待,你的意思是你想在服務器端運行JavaScript代碼,每個項目的foreach一步應該評估javascript代碼?

+0

正確!理想情況下,我希望JS通過每次迭代來執行。 但我不確定這是否可能? 我不想在Velocity做這件事的唯一原因 - 很好,因爲我不知道如何。 但我會考慮逃避? –

+0

Velocity無法運行JavaScript(客戶端),您必須使用速度腳本(服務器端),這是一個有限的功能集相比,瀏覽器的JavaScript引擎。您可以在循環內創建StarIMG字符串並輸出html標籤。我提供的Velocity鏈接應該有Velocity腳本語法的例子。 – Whome

+0

基本語法是$ mybean.rating對Mybean.getRating()getter的引用。嘗試'#set($ startIMG =「sometext/$ e.rating/continue.gif」)'然後在html鏈接中使用該$變量。應該讓你開始並添加if-then-else使用速度來限制評分值。 – Whome