我了解轨道3.1资产管道背后的原因:我们将所有JS编译成一个整齐,可缓存的文件,以提高性能.我们想要的很好
但是,加载所有内容也意味着我们必须非常小心,如果我们附加了一些JS,我们不会在多个页面上使用某个ID或类.否则,JS将在两个页面上启动,因为它始终加载.
现在,我们想要实现的是:
*我们希望将所有内容保存在一个单一的JS文件中(我们知道我们如何分别加载文件,只是不想要)
*我们要命名每个controller_name.js中的JS,所以只有当适当的命名空间被初始化时才加载它
*我们想通过从< body>< body>上的数据属性读取当前控制器来初始化适当的命名空间.我们的布局标签
问题是:我们没有一个好主意如何在JS中实现.特别是,我们应该如何命名空间JS,然后根据HTML标签的内容动态地初始化它.
任何帮助是极大的赞赏!
解决方法
这是一种命名空间控制器/动作级别的方法
> http://www.viget.com/inspire/extending-paul-irishs-comprehensive-dom-ready-execution/
以上是http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/的启发
你基本上宣布你身体如此
<body data-controller="<%= controller_name %>" data-action="<%= action_name %>">
然后这些方法被调用(每个方法都有一系列的方法 – 所以如果你需要每个页面上的东西,它都是共同的/ init,或者所有用户的操作,这在user / init上,或者只有用户显示页面?这是用户/展示.
SITENAME.common.init(); SITENAME.users.init(); SITENAME.users.show();
我已经使用了它,它的工作非常好.