2017-02-24 11 views
0

でテンプレートをレンダリング(home/index.gspGrailsは、私はこれが私の見解である部分的にリモートアクション</p> <p>でビューを更新しようとしているリモートアクション

<button type="button" class="btn btn-success">Update</button> 
<g:render template="datetime", model="[mybean: mybean]"/> 

これは私のテンプレート(ホーム/ _datetime.gspです)

<p>Time: ${mybean.getHours()} : ${mybean.getMinutes()} : ${mybean.getSeconds()}</p> 

これは私のjs

$("button.btn-success").click(function(event){ 
    $.post("/home/updateTime") 
}) 
です3210

これは私が/home/indexを参照する場合は、テンプレートが正しくレンダリングされますが、私はボタンをクリックすると、テンプレートが更新されません私のコントローラ

class HomeController { 

    def index() { 
     def bean = new MyDateBean() 
     render view:"index", model:[mybean:bean] 
    } 

    def updateTime(){ 
     log.debug("Updating time") 
     def bean = new MyDateBean() 
     render template:"datetime", model:[mybean:bean] 
    } 


    class MyDateBean{ 

     private String hours 
     private String minutes 
     private String seconds 

     MyDateBean(){ 
      def date = new Date() 
      this.hours = date.format("H") 
      this.minutes = date.format("m") 
      this.seconds = date.format("s") 
     } 

     String getHours(){ 
      return this.hours 
     } 

     String getMinutes(){ 
      return this.minutes 
     } 

     String getSeconds(){ 
      return this.seconds 
     } 
    } 
} 

です。どうして?

答えて

0

divにテンプレートをラップします。私はコメントは上記のテンプレートをレンダリングするあなたの懸念に答えると思います

<script type="text/javascript"> 
      $(document).ready(function() { 

     $("button.btn-success").click(function(event){ 
      $.ajax({ 
       url: "${g.createLink(controller:'test', action:'updateTime')}", 
       type: 'get' 
      }).success(function (data) { $('#dtsDiv').html(data); }); 
     }) 
    }); 
</script> 
+0

を試してみてくださいより多くのJavaメソッド対グルーヴィーの容易さに関連した実際の問題とは無関係であったものをあなたは作品を書きましたが、レンダリングテンプレートのグレーズ機能は使用しません – fabiocolo

+0

あなたのページ(index.gsp)がロードされると、すべてのタグと式が評価されます。ページをリロードせずに再レンダリングを開始することはできません。この場合、homeController/updateTimeは再レンダリングを行い、結果を返し、jQuery経由でDOMに設定されます。 –

+0

上記のコードを '.success(function(data){ $( '#dtsDiv').html(data); })に変更すると、実際のデータが別のテンプレートに戻されます。これはjavascriptの基礎です – Vahid

0

<div id="dtsDiv"> 
    <g:render template="datetime" model="[mybean: mybean]"/> 
</div> 

その後、次のJavaScriptを使用します。コメントは、あなたはjqueryのメソッド(AJAX)をトリガするときと指摘してリクエストを呼び出すコントローラに作られており、AJAX要求はテンプレートだけをコントローラに行われた場合

if (request.xhr) { 
render template:'template' 
return 
} 
// since we return above no need for else and so hence otherwise 
render view: 'view' 

で撮影することができますので、あなた自身のコメントを返すことができますMikeがレスポンステキストのレンダリングを提案しているだけでなく、実際には間違っています。

とにかく私の答えの理由は

<p>Time: ${mybean.hours} : ${mybean.minutes} : ${mybean.seconds}</p> 

クラスにHomeController {

def index(MyDateBean bean) { 
    render view:"index", model:[mybean:bean] 
} 

def updateTime(MyDateBean bean){ 
    log.debug("Updating time") 
    render template:"datetime", model:[mybean:bean] 
} 


class MyDateBean{ 

    def date=new Date() 

    String getHours(){ 
     return date.format("H") 
    } 

    String getMinutes(){ 
     return date.format("m") 
    } 

    String getSeconds(){ 
     return date.format("s") 
    } 
} 
} 
関連する問題

 関連する問題