禁用 turbolinks 以提供特定页面 javascript

Disabling turobolinks to serve page specific javascript

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

是否值得通过禁用 Turbolinks 为特定页面提供服务来牺牲导航时间 javascript,或者我是否应该不在乎,只使用 Jquery 中的 if 语句来检查某些元素是否存在于使用他们的 ID 的页面。

rails 这样做的方法是什么?

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

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

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

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

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

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