gon未在javascript中定义错误
非常简单的问题。 我正在尝试使用gon。 我在控制器中设置变量,如下所示:
gon.preference = "hello"
在我的.js.erb文件中,我尝试使用这样的变量:
console.log(gon.preference)
但我得到一个错误,说“gon没有定义”。 可能是什么问题呢? 显然,rails认识到有一个gon变量。 .js.erb文件位于我的assets / javascripts目录中。 我尝试将文件名更改为.js(虽然我没想到这会产生任何影响)。 显然没有变化。
不知道为什么gon不起作用!
救命?
这里很好的答案,但确切地知道发生了什么。 我多次渲染没有布局的特定视图。 但是,由于我在重新渲染此视图时没有渲染布局,因此application.html.erb中的<%= include_gon %>
行无用。
我将<%= include_gon %>
直接放入我正在渲染的视图中,现在一切正常!
我发现将此添加到您的标题有帮助。
<%= include_gon(:init => true) %>
也适用于导轨4。
我创建了一个测试项目,试图看看我是否有同样的问题,我发现了!
解决方案在application.html.erb
中的标头中添加标记<%= include_gon %>
:
app/views/layouts/application.html.erb
Test <%= include_gon %> <%= stylesheet_link_tag "application", media: "all", "data-turbolinks-track" => true %> <%= javascript_include_tag "application", "data-turbolinks-track" => true %> <%= csrf_meta_tags %>
在视图中:
console.log(gon.preference)
在控制器中:
gon.preference = "hello"
输出:
在这里阅读更多
@ Ringo解决方案的替代方法是将语句保留在应用程序布局文件中,只需按如下方式修改它:
<%= include_gon if defined? gon && gon.present? %>
这使得include_gon
引用尽可能保持DRY,同时仍然保持灵活和不引人注目。
我有相同的错误消息,并使用user456584的答案,但错误消息仍然存在。 一旦我在控制器中添加gon.event = @event或gon.events = @events,我猜gon已经定义,因此,我不再有错误消息“gon未定义”。
def show @event = Event.find(params[:id]) gon.events = @events respond_to do |format| format.html # show.html.erb format.json { render json: @event } end end
我是新用户,我只是想贡献。 在所有其他建议之后,这是唯一对我有用的方法。
我只是遇到了我认为同样的问题,我想知道include_gon调用是否应该在正文中而不是application.html.erb的标题中。 在application.html.erb的标题和正文中都放置了一个js警报,表明标题并不总是被调用,而正文是。
如果我最初在我的网站上加载了一个页面,而不是使用它的那个页面,然后通过标题链接在那里导航,我遇到了缺乏gon但是如果我最初加载了gon-using页面,该网站将正常工作,直到在任何其他页面上重新加载。
将include_gon从标题移动到布局的主体似乎已经解决了这个问题。 我意识到这不是gon docs如何建议应该这样做的,但是我不知道它将如何以另一种方式工作。
这是发生在我身上的事
<% include_gon %>
位于application.html.erb中,但仍然出现此错误。
最后的原因是在控制器 中,方法的名称是我设置的gon变量与视图路径不匹配。 因此在渲染视图之前没有调用控制器方法,并且似乎只在使用时包含gon (这很棒)
要解决它,在我的情况下,我只需要确保routes.rb路由和Controler / Method的名称匹配
你应该添加
<%= Gon::Base.render_data %>
到application.html.erb
的head
部分
我最近遇到了同样的问题,我的解决方案是添加
if(window.gon != null) { ... }
在我的javascript文件中
我发现在app/views/layout/application.html.slim
标头中考虑加载gon和应用程序javascript的顺序很重要。
在加载像这样的javascript 之前我必须加载gon:
doctype html html lang= I18n.locale.to_s head meta charset='utf-8' meta name='viewport' content='width=device-width, initial-scale=1.0' title == content_for?(:title) ? yield(:title) : t('general.home') = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' = include_gon = javascript_include_tag 'application' = javascript_include_tag 'https://www.gstatic.com/charts/loader.js' = csrf_meta_tag = favicon_link_tag 'favicon.ico' body .main = render 'layouts/navbar' = render 'layouts/title', title: @title = render 'layouts/messages' = yield
在= javascript_include_tag 'applicaion'
之后移动= include_gon
立即引发相同的错误。