2012-11-06 44 views
2

我是grails的新手,無法找到解決方案。如何在grails中將部分模板加載到div中

每當創建客戶端被點擊時我想用部分模板_client.gsp的內容填充主要內容div。

我有以下的GSP頁面admin.gsp

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Admin Create</title> 
<meta name="layout" content="main"/> 
    </head> 
    <body> 
    <aside class="sidebar span3"> 

     <ul class="nav nav-list"> 
     <li class="nav-header">Admin Console</li> 
     <li class="create-client"><a href="#">Create Client</a></li> 
     <li><a href="#">Library</a></li> 
     </ul> 
    </aside> 

    <div class="main-content span7"> 
    </div> 

    <g:javascript src="admin.js"/> 
    </body> 
</html> 

我有一個名爲_client.gsp

<g:hasErrors bean="${client}"> 
    <div class="alert alert-error alert-block client "> 
    <g:renderErrors bean="${client}" as="list" /> 
    </div> 
</g:hasErrors> 
<g:form controller="admin" action="createClient">    
    <div class="row"> 
    <legend>Create Client</legend> 
     <div class="span4"> 
     <label>Client Name:</label> 
     <g:textField name="client.name" /> 
     </div> 
     <div class="span4"> 
     <label>Client Type:</label> 
     <g:textField name="clientType.type"/> 
     </div> 
     <div class="span4"> 
     <label>External Id:</label> 
     <g:field type="number" required="" min="0" value="1" name="client.externalId"/> 
     </div> 
    </div> 
    </div>  
</g:form> 

我admin.js局部模板看起來像這樣

$(function(){ 
    $('.create-client').on('click', function(e){ 
    e.preventDefault(); 
    $('.create-client').addClass('active'); 
    $('main-content').load('_client.gsp'); 
    }); 
}); 

我比前端更習慣於後端開發,因此對我來說是裸露的。任何幫助將不勝感激

回答

9

首先,創建一個控制器,提供了一個AJAX調用模板內容:

class AdminController { 
    def client() { 
     render template: 'client', 
      model: [...], 
      contentType: 'text/plain' 

    } 
} 

這使的_client.gsp爲一個字符串的內容,並用text/plain內容類型返回它。在您的JavaScript中,撥打電話load

$('.main-content').load('/myapp/admin/client'); 
+0

謝謝,這正是我所需要的。儘管如此,我還是陷入了另一個問題。如果出現錯誤,我將如何處理重定向回部分加載的視圖? –

+0

看到這個答案:http://stackoverflow.com/questions/12377142/grails-page-wont-redirect-after-completed-ajax-call/12377467#12377467 – ataylor

+0

我想念的話。如果我在部分提交表單並且無效(在控制器中保存失敗),我該如何重新渲染帶有部分加載和錯誤的頁面。我認爲這將是更多的JavaScript工作。我無法在grails中找到任何允許我這樣做的事情 –

相關問題