2015-10-25 38 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>