我在 Rails 5.0.0.1 中使用 Turbolinks 有一个高度交互的事件驱动页面。 在不同的页面上有不同的交互,像 window.resize 这样的事件将在我真正不需要的页面上触发。
是否值得通过禁用 Turbolinks 来提供页面特定的 javascript 来牺牲导航时间,或者我应该不关心并只使用 Jquery 中的 if 语句来使用其 ID 检查页面中是否存在某些元素。
rails 执行此操作的方式是什么?
最佳答案
不建议提供页面特定资源,例如 javascript。这会降低用户体验,因为导航到新页面会触发另一个 Assets 下载。
Rails Assets 管道的全部要点是收集您的 Assets ,缩小它们并将它们全部连接到一个文件中,浏览器仅在用户第一次导航到您的页面时下载该文件一次。
是的,使用 jQuery 检查是否存在某些元素来运行某些行为。
我发现有用的方法是不要将 js 行为视为特定于页面,而是特定于小部件。例如如果 DOM 中有可排序表,则初始化可排序表小部件,即 $(".sortable").sortable()
上面的示例使用 jQuery plugins图案。将你的行为/小部件逻辑放在 jQuery 插件中,它只会在选择器找到元素时运行,例如$("#nonexistant").something()
, something()
不会被调用。 $("#definitelyExists").somethingElse()
, somethingElse()
将被调用。
在前面的示例中,当找到元素并调用函数时,函数的 this
会引用匹配的元素,您可以在它们上运行行为逻辑。
关于javascript - 禁用 turobolinks 来服务页面特定的 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39355071/