2011-09-26 75 views
0

我想使用Java Play Framework來執行一些AJAX風格的數據檢索,並遇到了'route'腳本語法的問題。JavaScript中的Java Play框架Groovy腳本

問題是在下面的代碼@{Movies.show("'+movie.id+'")}被編譯爲url/etc/+movie.id+而不是url/etc/1

<script type="text/javascript"> 
     function showMoreMovies() 
     { 
     $.getJSON('@{Movies.jsonAllMovies()}', function(movies) { 

      var items = []; 

      $.each(movies, function(i, movie) 
      { 
      var div_data = '<div class="movie">'+ 
          '<h2 class="movie-title"><a href="@{Movies.show("'+movie.id+'")}">'+movie.title+'</a></h2>'+ 
          '<div class="release-date">' + movie.releasedString + '</div>'+ 
          '<div class="comments">| comments: ' + movie.commentCount + '</div>'+ 
          '</div>'; 

      $(div_data).appendTo("#movie_results"); 

      }); 
     }); 
     } 
</script> 

一個解決辦法是硬編碼的路線網址:

<a href="url/etc/'+movie.id+'"> 

其作品,但你失去了自動路由的好處。

是否有其他人遇到過這個問題或找到了解決此問題的新方法?

回答

4

這是很正常的...... 提醒一個groovy腳本在服務器端預編譯並且不在客戶端執行。

<a href="@{Movies.show("'+movie.id+'")}">編譯和Groovy解析@{Movies.show("'+movie.id+'")}併產生"url/etc/+movie.id+"這是行動的Movies.show(id="+movie.id+")

你應該使用這個網址:http://www.playframework.org/documentation/1.2.3/ajax

var showAction = #{jsAction @Movies.show(':id') /} 

,然後用它這樣的:

var div_data = '<div class="movie">'+ 
       '<h2 class="movie-title"><a href="'+ showAction({id: movie.id}) +'">'+movie.title+'</a></h2>'+ 
       '<div class="release-date">' + movie.releasedString + '</div>'+ 
       '<div class="comments">| comments: ' + movie.commentCount + '</div>'+ 
       '</div>'; 
+0

或者你可以一個URL字段添加到其從'@返回你的電影的JSON {Movies.jsonAllMovies()}'叫 –

+0

是它的工作原理也! – mandubian

0

另一種解決方案是使用以下內容:

"/movies/show/etc/"+movie.id;