Rails Sprockets JS连接:避免JS冲突的最佳实践

时间:2012-04-02 01:59:05

标签: html ruby-on-rails-3.1 sprockets

让我们说有两个页面有两个不同的html元素,它们具有相同的名称

a.html
<select id='collection_select'></select>


b.html
<select id='collection_select'></select>

并且有一个javascript函数,只能应用于a.html

a.js
$(function(){
  $('#collection_select').change(function(){
    ....
  })
})

Becase Rails连接所有JS资产,此功能现在也适用于b.html。是否有Rails / Sprockets / JS最佳实践以特定方式构造和命名JS资产,以便JS的范围仅限于特定页面。

2 个答案:

答案 0 :(得分:0)

这篇博文提供了一个很好的方法:http://viget.com/inspire/extending-paul-irishs-comprehensive-dom-ready-execution

总结一下它涉及

  1. data-controller标记上添加<body>属性。
  2. 在命名空间中确定所有JS的范围。
  3. 然后,JS Util按惯例匹配并在data-controller的JS命名空间中加载JS。
  4. 干杯

答案 1 :(得分:-1)

JsSpace.on('users', {
  index: function(){
    console.log('index action of users controller');
  }
});

该模式由渲染控制器和动作实现到body属性中 获取它们并执行匹配功能。 js-namespace-rails