“适当的”;铁路";在特定页面上执行javascript的方法
我试图在特定页面上运行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
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 %>">