编程语言
首页 > 编程语言> > 如果仅在特定页面上使用javascript,为什么不应该将其置于视图中?

如果仅在特定页面上使用javascript,为什么不应该将其置于视图中?

作者:互联网

his answer Richard Peck 写作:

不引人注目的JS

要考虑的其他事情(你已经这样做了),你真的需要在你的应用程序中使用不显眼的javascript.

不引人注目的JS基本上意味着您能够将页面中的“绑定”抽象为资产管道中的Javascript文件.有几个重要原因:

  • Your JS can be loaded on any page you want (it’s DRY)

  • Your JS will reside in the “backend” of your app (won’t pollute views)

  • You’ll be able to use the JS to populate the various elements / objects you want on screen

总是建议你将你的JS放在单独的文件中 – 包括在视图中为你设置一个大麻烦

这让我想到以下问题:

If I am only using a script on a certain page, why would I want to have it load on every page? Doesn’t that go against the DRY? Maybe I am not properly understanding how the Rails pipeline works.

解决方法:

Rails pipeline

它不是Rails管道,unobtrusive JS是标准的编程模式.

将JS从页面(“内联”)提取到外部文件会清除页面,仅此而已.

如果要快速加载页面,则需要将JS拆分为单独的文件.这可以是类的形式,但主要用于特定于页面的功能.例如,您可能有admin.js和application.js.

轨道

特别是关于Rails,处理不引人注目的JS的方法归结为如何预编译资产.标准方法是将所有功能放入application.js中 – 这显然会变得臃肿.

解决这个问题的方法是使用config.assets.precompile钩子 – 允许您指定要包含的文件作为单独的预编译元素:

# config/application.rb
config.assets.precompile << %w(admin.js cart.js etc.js)

这将在Sprockets 4中变为handled by manifest.js(如果需要,我可以在更新中解释这一点).我在他们的回购中写了一个commit.

这意味着当您预编译资产时(或者当您在dev中运行它们时 – 它们被缓存),您将获得admin.js或您定义的任何单独预编译的内容.这本身就没有任何意义;这些文件只会出现在公共/资产中.

它的意思是您可以引用布局中的文件:

# app/views/layouts/application.html.erb
<%= javascript_include_tag :application, (:admin if [[condition]]) %>

or

# app/views/layouts/admin.html.erb
<%= javascript_include_tag :admin %>

因此,您可以在需要时调用所需的文件.

我可以深入探讨,但这应该回答当前的问题.

标签:javascript,ruby-on-rails,turbolinks
来源: https://codeday.me/bug/20190627/1308750.html