【问题标题】:How to namespace our JS for use with the Rails asset pipeline如何命名我们的 JS 以与 Rails 资产管道一起使用
【发布时间】:2011-12-19 19:05:48
【问题描述】:

我理解 rails 3.1 资产管道背后的原因:我们将所有 JS 编译到一个整洁的、可缓存的文件中以提高性能。太好了,我们想要那个。

但是,加载所有内容也意味着我们必须非常小心,不要在多个页面上使用某个 ID 或类,如果我们附加了一些 JS。否则,JS 将在两个页面上触发,因为它总是加载。

现在,我们要实现以下目标:
* 我们希望将所有内容保存在一个 JS 文件中(我们知道如何单独加载文件,只是不希望这样)
* 我们希望在每个 controller_name.js 中为 JS 命名空间,因此仅在初始化适当的命名空间时才加载它
* 我们想通过从布局的<body> 标记上的数据属性读取当前控制器来初始化适当的命名空间

问题是:我们不知道如何在 JS 中实现。特别是,我们应该如何命名JS,然后根据HTML标签的内容动态初始化它..

非常感谢任何帮助!

【问题讨论】:

标签: javascript ruby-on-rails


【解决方案1】:

这是一种在控制器/动作级别上命名所有内容的方法

你基本上是这样声明你的身体

<body data-controller="<%= controller_name %>" data-action="<%= action_name %>">

然后调用这些方法(每个方法都有一系列方法 - 因此,如果您在每个页面上都需要一些东西,它在 common/init 中。或者在所有用户操作上,在 users/init 上。或者只有用户显示页面?那是用户/显示。

SITENAME.common.init();
SITENAME.users.init();
SITENAME.users.show();

我用过这个,效果很好。

【讨论】:

    【解决方案2】:
    JsSpace.on('users', {
      index: function(){
        console.log('index action of users controller');
      }
    });
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-18
      • 1970-01-01
      相关资源
      最近更新 更多