0

我必须根据我在另一个下拉列表中选择的值动态加载一组值。

在控制器中,我有以下代码,

def ajaxGetCities(params){

   println params.id
   def userCustPlantDetails = utilitySummaryService.fetchUserCustPlantDetails('PHILL00')

   def data = []
   userCustPlantDetails?.get('UserPlantList').collect{
        data << it.pwr_plt_nme
   }

   [data: data]         
}

在普惠制中,我有:

 <g:select class="btn btn-default" name="viewValue" from="${view}" onchange="${remoteFunction(
        action:'ajaxGetCities', 
        params:'\'id=\' + escape(this.value)', 
        onSuccess :'updateCity(data)')}"></g:select>

当我更改下拉列表的值时,我看到触发器和控制器操作被调用。发布 Javascript(JQuery) updateCity 运行良好。我将脚本放在同一个 .gsp 文件中。如果我将此脚本移动到 proj 文件夹中的外部文件(在 assets/javascript 下)。页面未正确呈现。我的意思是很少有组件没有被渲染。我将外部文件引用放在标签之前,还尝试将 GSP 的所有内容放在前面。如果没有上面提到的 javascript,文件中的所有其他脚本在引用文件的任何地方都运行良好。当我将 javascript 从 GSP 移动到 index.js 时。这个问题正在发生。

4

1 回答 1

0

那不是 JavaScript。这是一个使用 taglib 和 Groovy 代码的 Grails GSP 表达式。它在运行时生成JavaScript,并将其写入发送到浏览器的 HTML,这就是它在 GSP 中工作的原因。但是没有处理 .js 文件来查找 GSP 表达式、taglib 调用、Groovy 代码等 - 这些文件被假定为只是静态 JavaScript。

要在 .js 文件中使用它,您需要获取生成的 JavaScript 代码,这可以从您的浏览器中获得 - 查看生成页面的源代码以查看它。

于 2014-09-28T19:35:42.630 回答