在 Grails 中基本上有 2 个地方可以定义 JavaScript 函数,直接在 GSP 上的一个元素中,以及在/web-app/js 下的一个单独的 javascript 源文件中(例如,application.js)。我们在 application.js 中定义了一个常用的 javascript 函数,但我们还需要能够使用 groovy 代码动态生成部分函数。不幸的是,${some groovy code} 似乎没有在单独的 javascript 源文件中处理。
是通过在 GSP 页面上的脚本标记内定义 javascript 函数来实现此目的的唯一方法,还是有更通用的解决方案?显然,我们可以在模板 GSP 文件中的脚本标记中定义 javascript 函数,该文件将被重用,但是有很多插入力将我们的 javascript 函数一起定义在一个地方(即外部 javascript 源文件)。这也有性能优势(javascript 源文件通常只被每个客户端的浏览器下载一次,而不是在他们访问的每个 html 页面的源代码中重新加载相同的 javascript 函数)。我考虑过将函数分解为静态和动态部分的想法,将静态部分放在外部源中,将动态部分放在模板 GSP 中,然后将它们粘合在一起,但这似乎是一个不必要的 hack。
有什么想法吗?
(编辑:这听起来像是动态生成 JavaScript 函数的一部分的想法,然后下载一次并由客户端一遍又一遍地使用,这将是一个坏主意。但是,“动态的”部分"可能每周或每月仅更改一次,然后更改的幅度很小。大多数情况下,我们只希望从数据库中生成该片段,即使只有一次,而不是硬编码。)
最佳答案
保持 JavaScript 不显眼的一个简单解决方案是创建一个 JavaScriptController 并将其操作映射到“/js/*”,方法是将其添加到您的 UrlMappings.groovy 中。文件:
"/js/$action"{
controller = "javascript"
}
然后只需为您想要的每个动态 JS 文件创建一个操作,将其包含在您的布局
中,很快,您就有了一个可以将 Grails 片段插入其中的 JS 文件! :)
注意:我发现目前 Grails 中存在一个错误,它不能正确地将文件扩展名映射到内容类型,因此您需要包含 <%@ page contentType="text/javascript; UTF-8" %>在 View 文件的顶部。
关于javascript - 在 Grails 的 JavaScript 源代码中执行 groovy 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/425618/
我在使用omniauth/openid时遇到了一些麻烦。在尝试进行身份验证时,我在日志中发现了这一点:OpenID::FetchingError:Errorfetchinghttps://www.google.com/accounts/o8/.well-known/host-meta?hd=profiles.google.com%2Fmy_username:undefinedmethod`io'fornil:NilClass重要的是undefinedmethodio'fornil:NilClass来自openid/fetchers.rb,在下面的代码片段中:moduleNetclass
如何在buildr项目中使用Ruby?我在很多不同的项目中使用过Ruby、JRuby、Java和Clojure。我目前正在使用我的标准Ruby开发一个模拟应用程序,我想尝试使用Clojure后端(我确实喜欢功能代码)以及JRubygui和测试套件。我还可以看到在未来的不同项目中使用Scala作为后端。我想我要为我的项目尝试一下buildr(http://buildr.apache.org/),但我注意到buildr似乎没有设置为在项目中使用JRuby代码本身!这看起来有点傻,因为该工具旨在统一通用的JVM语言并且是在ruby中构建的。除了将输出的jar包含在一个独特的、仅限ruby
在rails源中:https://github.com/rails/rails/blob/master/activesupport/lib/active_support/lazy_load_hooks.rb可以看到以下内容@load_hooks=Hash.new{|h,k|h[k]=[]}在IRB中,它只是初始化一个空哈希。和做有什么区别@load_hooks=Hash.new 最佳答案 查看rubydocumentationforHashnew→new_hashclicktotogglesourcenew(obj)→new_has
我遵循了教程http://gettingstartedwithchef.com/,第1章。我的运行list是"run_list":["recipe[apt]","recipe[phpap]"]我的phpapRecipe默认Recipeinclude_recipe"apache2"include_recipe"build-essential"include_recipe"openssl"include_recipe"mysql::client"include_recipe"mysql::server"include_recipe"php"include_recipe"php::modul
我的主要目标是能够完全理解我正在使用的库/gem。我尝试在Github上从头到尾阅读源代码,但这真的很难。我认为更有趣、更温和的踏脚石就是在使用时阅读每个库/gem方法的源代码。例如,我想知道RubyonRails中的redirect_to方法是如何工作的:如何查找redirect_to方法的源代码?我知道在pry中我可以执行类似show-methodmethod的操作,但我如何才能对Rails框架中的方法执行此操作?您对我如何更好地理解Gem及其API有什么建议吗?仅仅阅读源代码似乎真的很难,尤其是对于框架。谢谢! 最佳答案 Ru
我在用Ruby执行简单任务时遇到了一件奇怪的事情。我只想用每个方法迭代字母表,但迭代在执行中先进行:alfawit=("a".."z")puts"That'sanalphabet:\n\n#{alfawit.each{|litera|putslitera}}"这段代码的结果是:(缩写)abc⋮xyzThat'sanalphabet:a..z知道为什么它会这样工作或者我做错了什么吗?提前致谢。 最佳答案 因为您的each调用被插入到在固定字符串之前执行的字符串文字中。此外,each返回一个Enumerable,实际上您甚至打印它。试试
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
我目前正在使用以下方法获取页面的源代码:Net::HTTP.get(URI.parse(page.url))我还想获取HTTP状态,而无需发出第二个请求。有没有办法用另一种方法做到这一点?我一直在查看文档,但似乎找不到我要找的东西。 最佳答案 在我看来,除非您需要一些真正的低级访问或控制,否则最好使用Ruby的内置Open::URI模块:require'open-uri'io=open('http://www.example.org/')#=>#body=io.read[0,50]#=>"["200","OK"]io.base_ur
我注意到类定义,如果我打开classMyClass,并在不覆盖的情况下添加一些东西我仍然得到了之前定义的原始方法。添加的新语句扩充了现有语句。但是对于方法定义,我仍然想要与类定义相同的行为,但是当我打开defmy_method时似乎,def中的现有语句和end被覆盖了,我需要重写一遍。那么有什么方法可以使方法定义的行为与定义相同,类似于super,但不一定是子类? 最佳答案 我想您正在寻找alias_method:classAalias_method:old_func,:funcdeffuncold_func#similartoca