2015-10-25 42 views
0

我已經搜索了這個,但似乎無法找到正確的解決方案。我會貶低這一點,看看我會出錯的地方。Grails GSP訪問腳本內的變量

我正在使用Grails進行項目,我非常喜歡它。我認爲難以避免的地方在於GSP。

有人能告訴我了:

控制器:

def index() 
{ 
    def message = "This is a test" 
    [message: message] 
} 

在視圖裏

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <script type="text/javascript"> 
     $(document).ready(function() { 

      HOW DO YOU ACCESS THAT VARIABLE IN HERE 

     }); 

<body></body> 
</html> 

我想喂一些第三方的JavaScript庫,我有一個試圖解決這個問題。是的,我可以手動ajax或使用第三方庫來調用ajax thingy。但是,我認爲這是一個Grails的方式,所以我不必做太多繁重的工作。我的意思是說,你是否有機會在腳本上面訪問它,並使所有的東西全球化?試圖找出正確的做法是什麼。

我使用的示例庫是具有ajax調用的JQwidgets庫,但我寧願將數組等直接傳遞給Grails中的通過命名操作。

+2

'$(文件)。就緒(函數(){VAR東西=「 $ {message}「;}''''''假設正在渲染的GSP是來自'index'控制器方法的視圖,這樣'view'中的'model'可用於GSP何時編譯和渲染頁面。 –

回答

-1

好吧,因爲這導致我走下了答案的道路。

關鍵是把編解碼器放在gsp的頂端。

我不禁想到我一起黑客攻擊。每當我通過「google」進行編碼時,我發現我沒有遵循「專業人士」的做法。 現在這似乎解決了這個問題。

控制器

def index() { 

    def configtree = ConfigTree.list() 
    [message: configtree as JSON] 
} 


<%@page expressionCodec="none" %> 
<!DOCTYPE html> 

...

<script type="text/javascript"> 
    $(document).ready(function() { 
    var data = ${raw(message)}; 

    // prepare the data 
    var source = 
    { 
     datatype: "json", 
     datafields: [ 
      { name: 'id' }, 
      { name: 'parentid' }, 
      { name: 'text' }, 
      { name: 'icon' }, 
      { name: 'expanded' }, 
      { name: 'selected' }, 
      { name: 'iconsize' }, 
      { name: 'disabled' }, 
      { name: 'value' } 
     ], 
     id: 'id', 
     localdata: data 
    }; 

    var dataAdapter = new $.jqx.dataAdapter(source); 

    dataAdapter.dataBind(); 

    var records = dataAdapter.getRecordsHierarchy('id', 'parentid', 'items', [{ name: 'text', map: 'label'}]); 
+0

請務必記住grails部分在服務器上執行,並在瀏覽器上執行javascript。這就是爲什麼你不能從視圖訪問grails變量(也不能從grails代碼訪問javascript變量)。 @ joshua-moore的評論就是這樣做的。 – Fernando

0

你可以這樣寫:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <script type="text/javascript"> 
     $(document).ready(function() { 
      var message = "${message}"; 
      console.log("I'm from GSP", message); 
      $("input[selector]").val(message); // Just a dumb example 
     }); 
    </script> 
</head> 
<body> 
</body> 
</html>