我理解rails 3.1资产管道背后的原因:我们在一个整洁,可缓存的文件中编译所有JS以提高性能。太好了,我们想要那个。
然而,加载所有内容也意味着我们必须非常小心我们不要在多个页面上使用某个ID或类,如果我们附加了一些JS。否则,JS会在两个页面上触发,因为它总是被加载。
现在,我们想要实现的目标如下:
*我们希望将所有内容保存在一个JS文件中(我们知道如何单独加载文件,只是不希望这样)
*我们希望在每个controller_name.js
中对JS进行命名空间,因此只有在初始化相应的命名空间时才会加载它
*我们希望通过从布局的<body>
标签上的数据属性中读取当前控制器来初始化相应的命名空间
问题是:我们不知道如何在JS中实现。特别是,我们应该如何命名JS,然后根据HTML标记的内容动态初始化它。
非常感谢任何帮助!
答案 0 :(得分:15)
这是一种在控制器/操作级别命名所有内容的方法
你基本上就是宣告你的身体
<body data-controller="<%= controller_name %>" data-action="<%= action_name %>">
然后调用这些方法(每个方法都有一系列方法 - 所以如果你需要在每个页面上都有东西,那就是普通的/ init。或者在所有用户的操作上,那是在用户/ init上。或者只是用户show page?that's users / show。
SITENAME.common.init();
SITENAME.users.init();
SITENAME.users.show();
我已经使用了它,它的效果非常好。
答案 1 :(得分:1)
JsSpace.on('users', {
index: function(){
console.log('index action of users controller');
}
});
该模式由渲染控制器和动作实现到body属性中 获取它们并执行匹配功能。 js-namespace-rails