Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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
“适当的”;铁路";在特定页面上执行javascript的方法_Javascript_Jquery_Ruby On Rails_Ruby On Rails 4 - Fatal编程技术网

“适当的”;铁路";在特定页面上执行javascript的方法

“适当的”;铁路";在特定页面上执行javascript的方法,javascript,jquery,ruby-on-rails,ruby-on-rails-4,Javascript,Jquery,Ruby On Rails,Ruby On Rails 4,我试图在特定页面上运行javascript,而我唯一的解决方案似乎是反模式。我在assets/javascripts/中生成了controller.js。我使用的是gem'jquery turbolinks'我的代码如下所示: $(document).ready(function () { //Initiate DataTables ect.. } ) 这段代码在每一页上都会触发,所以我在其中添加了以下内容 if ($('#page-specific_element').len

我试图在特定页面上运行javascript,而我唯一的解决方案似乎是反模式。我在
assets/javascripts/
中生成了
controller.js
。我使用的是
gem'jquery turbolinks'
我的代码如下所示:

$(document).ready(function () {
    //Initiate DataTables ect..
    }
)
这段代码在每一页上都会触发,所以我在其中添加了以下内容

if ($('#page-specific_element').length > 0) {
    //Initiate Datatables ect.
}
我的问题是,有没有一种方法可以将rails设置为只使用特定控制器所需的javascript文件,或者元素搜索背后的逻辑选通是最佳解决方案?

有很多方法可以做到这一点。我来描述一个

我使用commonjs模块包装所有
.module.js
文件

然后,我有了一个助手,它将以下内容写入每个HTML页面头部的
标记中

<script>
  var App {
    pageModule: 'posts/create'
  };
</script>
最后,我将有一个这样的文件,它特定于
/posts/create
URL

app/assets/posts/create.module.js

module.exports = {

  initialize: function() {
    // data-tables stuff here...
  }

}

这是一个非常好的TurboLink特定解决方案:

<body data-controller="<%= controller.controller_name %>" data-action="<%= controller.action_name %>">

//而不是侦听文档就绪
$(文档).on('users#show:loaded',function(){
$(“#logger”).append(“
  • 用户显示加载的操作”
  • ”); }); //而不是侦听文档就绪 $(文档).on('users:loaded',function()){ $(“#logger”).append(“
  • 一些用户加载了控制器方法
  • ”); }); //Turbolinks在更改页面内容时触发“页面:更改”。 //如果不使用,可以将其更改为“仅准备文档” //涡轮链接。 $(文档)。在(“第页:更改”,函数()上){ var data=$('body').data(); $(document).trigger(data.controller+':loaded'); $(document).trigger(data.controller+'#'+data.action+':load'); }); //这只是为了演示的目的。。。 $(文档).trigger(“页面:更改”)
    
    

      我已尝试添加到application.html.erb并删除//=require\u树。将application.js作为解决方案的一部分,但我遇到了将每个“controller.js”添加到预编译资产文件的需要,这似乎走错了路。感谢此解决方案。我发现了这个类似的问题,但并没有在上面提到。极其优雅的未被发现的涡轮链接宝石!我发布了一个基于这种模式的gem@max,无法为rails 5.1安装此gem。3@SyamsoulAzrien你能在github上创建一个问题吗?
      <body data-controller="<%= controller.controller_name %>" data-action="<%= controller.action_name %>">