禁用turobolinks以提供特定于页面的javascript

时间:2016-09-06 17:52:01

标签: javascript jquery ruby-on-rails ruby turbolinks

我在使用Turbolinks的rails 5.0.0.1中有一个高度交互的事件驱动页面。 在不同的页面上进行不同的交互,像window.resize这样的事件会在我不需要它的页面上触发。

是否值得通过禁用Turbolinks来提供特定于页面的javascript来牺牲导航时间,或者我是否应该关心并在Jquery中使用if语句来检查页面中是否存在使用其ID的某些元素。

执行此操作的轨道方式是什么?

1 个答案:

答案 0 :(得分:1)

建议不要提供javascript等特定于页面的资源。这会降低用户体验,因为导航到新页面会触发另一个资产下载。

Rails Asset Pipeline的重点是收集资产,缩小它们并将它们连接成一个浏览器仅下载一次的文件,这是用户第一次导航到您的页面。

是的,使用jQuery检查是否存在某些元素以运行某些行为。

我发现有用的方法是不将js行为视为特定于页面而是特定于小部件。例如如果DOM中有可排序表,则初始化可排序表小部件,即$(".sortable").sortable()

上面的示例使用jQuery plugins模式。将您的行为/窗口小部件逻辑放在jQuery插件中,它只会在选择器找到元素时才会运行$("#nonexistant").something()something()将不会被调用。 $("#definitelyExists").somethingElse()somethingElse()将被调用。

在前面的示例中,当找到一个元素并调用该函数时,函数的this引用匹配的元素,您可以在它们上运行行为逻辑。