Rails 3.1 Javascript的资产管道
作者:互联网
好的,我已经阅读了很多关于新资产管道Rails 3.1的信息,我找不到对我的怀疑的正确答案.
我根据我正在渲染的视图#动作按需加载我的.js文件.我这样做是为了防止不正确的绑定并加载小的.js文件.
candidate_opportunities#指数
$(".sortable_drag_n_drop").sortable({
update: function(event, ui) {
$.post('/candidate_opportunities/sort', $(this).sortable('serialize'));
},
handle: 'span'
});
candidate_companies#指数
$(".sortable_drag_n_drop").sortable({
update: function(event, ui) {
$.post('/candidate_companies/sort', $(this).sortable('serialize'));
},
handle: 'span'
});
$(".sortable_drag_n_drop").disableSelection();
现在最好的解决方案是什么?
>我应该更改我的绑定并让Sprockets使用// =编译我的所有.js文件
require_tree. ?
>或者我应该尝试加载我的
.js根据我的意见,所以我最终没有一个巨大的
application.js中?
解决方法:
如果要将此更新到管道,您有几个选项.您应该采取管道在决定时应该考虑的方式.
从广义上讲,他管道的目的是将所有JS加入到一个文件中并对其进行minfy / compress.这样做的目的是减少每页请求的数量,并允许设置远期标头,以便在浏览器或透明代理/缓存中的某个位置缓存资源.
关于选项.
1.和你现在一样.
你可以继续做你知道的同样的事情.我假设您正在使用rails助手在主布局文件中添加这些视图JS文件.您可以继续对管道执行相同操作,但是您必须将所有使用的文件添加到预编译数组中:
config.assets.precompile = [‘candidate_opportunities.js’,’candidate_companies’]
资产必须位于assets / javascripts中,但不需要将它们添加到清单文件中,因为您要单独添加每个资产.
强烈建议您坚持使用管道的Rails默认值并预编译资产以进行生产.
缺点是这些页面上的额外请求,但如果应用程序处于高负载状态,这只是一个问题.
2.资产管道方式(TM)
要使用管道执行此操作,您需要将这些文件移动到assets / javascripts和require_tree中.
在您的情况下,问题是JS片段针对同一个类(但具有不同的帖子URL),因此这不起作用.使用require_tree,文件的顺序可能不是您想要的.
一个新的3.1应用程序为视图生成文件(我认为),但期望它们将在标记中定位唯一属性(从站点的角度来看),因为所有文件都包含在application.js中
解决JS冲突的问题.我建议你重构JS片段,以便它更通用.您可以在可排序对象上使用data-post-url属性:
< ul class =“sortable_drag_n_drop”data-post-url =“/ candidate_opportunities / sort”>
然后收集JS中的url.
不仅是DRYer,而且整体JS总体较少,并且可以按预期完全使用管道.
标签:javascript,ruby-on-rails-3,view,asset-pipeline,sprockets 来源: https://codeday.me/bug/20190518/1127238.html