【问题标题】:Disabling turobolinks to serve page specific javascript禁用 turobolinks 以提供特定于页面的 javascript
【发布时间】:2016-09-06 17:52:01
【问题描述】:

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

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

rails 的方法是什么?

【问题讨论】:

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


    【解决方案1】:

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

    Rails 资产管道的全部意义在于收集您的资产、缩小它们并将它们全部连接到一个文件中,浏览器只下载一次,即用户第一次导航到您的页面时。

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-12-30
      • 2012-03-30
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      相关资源
      最近更新 更多