Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 是否可以在不使用require_树的情况下使用TurboLink?_Jquery_Ruby On Rails_Ruby On Rails 4_Turbolinks - Fatal编程技术网

Jquery 是否可以在不使用require_树的情况下使用TurboLink?

Jquery 是否可以在不使用require_树的情况下使用TurboLink?,jquery,ruby-on-rails,ruby-on-rails-4,turbolinks,Jquery,Ruby On Rails,Ruby On Rails 4,Turbolinks,我想在我的应用程序中使用TurboLink,但我不想在application.js中使用'require_tree',原因是我有特定的代码,应该只在特定的控制器中加载 如果我将require_tree从application.js中删除,则根本不会加载任何coffescripts,这会自动使它们变得无用 我很难理解TurboLink是如何工作的,所以如果这是一个非常愚蠢的问题,请原谅我 谢谢 编辑:示例: 我有3个控制器,用户,产品和销售。每个控制器都有自己的.js.coffee文件,其中的代码

我想在我的应用程序中使用TurboLink,但我不想在application.js中使用'require_tree',原因是我有特定的代码,应该只在特定的控制器中加载

如果我将require_tree从application.js中删除,则根本不会加载任何coffescripts,这会自动使它们变得无用

我很难理解TurboLink是如何工作的,所以如果这是一个非常愚蠢的问题,请原谅我

谢谢

编辑:示例:

我有3个控制器,用户,产品和销售。每个控制器都有自己的.js.coffee文件,其中的代码仅适用于其控制器

users.js.coffee:

$ ->
  $('#d_table').dataTable
    sPaginationType: "bootstrap"
  $('[data-behaviour~=datepicker]').datepicker
    format: 'dd/mm/yyyy'
products.js.咖啡

$ ->
  $('#r_chart').highcharts
    chart:
      type: 'spline'
$ ->
  $("#r_chart").highcharts
    chart:
      type: "column"
sales.js.咖啡

$ ->
  $('#r_chart').highcharts
    chart:
      type: 'spline'
$ ->
  $("#r_chart").highcharts
    chart:
      type: "column"
如果我在application.js中启用require_tree和turbolinks,会引发一个异常,因为我将两个事件绑定到#r_图表(如预期的那样),但它们排序为“工作”,尽管有很多错误(另一天的情况完全不同)

如果我禁用require_树,但保持turbolinks处于启用状态,则不会加载任何js.coffee文件,因此不会从jQuery触发任何事件

如果禁用require_tree和turbolinks,应用程序将按预期工作。每个控制器单独加载js.coffee文件,调用时触发所有事件

--


我想做的是使用第三种场景,其中启用了turbolinks,但是js.coffee文件是每个控制器单独加载的(而不是使用require\u tree一起加载)。

您不需要使用
require\u tree
。您可以要求每个javascript单独使用:

//= require turbolinks
//= require some_other_file
更多

我很难理解TurboLink是如何工作的

是一个Javascript库,旨在提高应用程序的效率:

Turbolinks使web应用程序中的以下链接更快。 而不是让浏览器重新编译JavaScript和CSS 在每次页面更改之间,它将保持当前页面实例处于活动状态,并且 仅替换正文和标题中的标题。想想CGI vs 持久过程

它的工作原理是重新加载网页的
标记,保持
标记不变-限制每次请求和呈现的数据量

Turbolinks的问题是javascript经常失去与
DOM
中的元素“绑定”的能力,这意味着您必须使用一些or使JS正常工作:

#app/assets/javascripts/application.js
var your_function = function() {
  // ... your functionality
}

$(document).on("page:load ready", your_function);
--

以控制器为中心的资产

如果您想加载以控制器为中心的资产,则TurboLink或
require_tree
不会有问题-这将是如何加载所需文件的问题

我建议您在布局中使用以下选项:

#app/views/layouts/application.html.erb
<%= stylesheet_link_tag  "application", controller_name, media: "all", "data-turbolinks-track" => true %>

修复

也许您的问题与元素的绑定有关

您正在使用匿名函数在
DOM
load上启动绑定-也许您最好使用来对其进行排序:

#app/assets/javascripts/application.js
var loading = function() {
   //highcharts stuff here
}

$(document).on("page:load ready", loading);

对如果您对特定代码有问题,请共享该代码,我们可以提供帮助。该代码并不复杂,但对某些控制器/方法来说非常特殊,因此当我通过jquery将事件绑定到元素时,它们在加载require_树时会引发异常,因为它们只在这些特定的控制器中找到。我将尝试提供一个简单的例子,但这不是真正的问题。我说的是控制器专用的咖啡脚本。这些.js.coffee文件是在没有require_tree的情况下启用TurboLink时不会加载的文件。我明白了,那么解决方案不是
application.js
manifest,因为它的目的是为链轮提供一个文件列表,以便在生产中连接到单个文件中。你需要手动
javascript\u在你想要的地方包含标签“specific\u file”
。如果你将脚本放在头部,你可以使用
yield:some\u content
content\u for:some\u content
技术将脚本从你想要的特定控制器动作放在头部。我很困惑。这些文件是每个控制器附带的标准.js.coffee文件,没有创建其他文件。当禁用turbolinks(以及require_tree)时,应用程序将按预期工作,但一旦启用turbolinks,就不会加载任何应用程序。我编辑了我的问题以反映我所说的。我想我已经接近你的建议了。我没有在DOM上绑定它们的问题(我使用的是一个gem来替换我的代码以使用正确的page:load指令),所以这一部分很好。我尝试按照您的建议使用controller_name helper,但出现了一个错误,我认为这是由于没有添加config.assets.precompile造成的。问题是,这个问题只存在于开发中,如果我将它发布到生产环境中,它就可以正常工作,没有任何修改,但我无法在开发过程中使用它。所以,我的问题是,这是否需要预编译?即使只是在开发环境中?错误是这样的,顺便说一句:“资产被过滤掉并且不会被提供:添加
Rails.application.config.assets.precompile+=%w(welcome.css)
config/initializers/assets.rb
并重新启动你的服务器”我注意到了一些事情,而不是
样式表链接标签
,我想你实际上指的是
javascript\u包含标签
,正确的?无论如何,我尝试了这种方法,并将
config.assets.precompile
添加到我的assets.rb,现在应用程序的行为就像根本没有启用TurboLink一样。我已经通过在%body
=javascript\u include\u tag controller\u name之后向我的application.html.haml添加以下行,使其能够单独加载coffescripts,“数据涡轮链接跟踪”=>true
。它几乎能起作用,现在唯一的问题是纸条