Как использовать пространство имен для JS для использования с конвейером Rails

Я понимаю аргументы, лежащие в основе рельсов 3.1: мы собираем все JS в аккуратном, кэшируемом файле для повышения производительности. Мы очень хотим этого.

Однако загрузка всех означает также, что мы должны быть очень осторожны, чтобы мы не использовали определенный ID или класс на нескольких страницах, если у нас есть JS. Или же JS будет запускаться на обеих страницах, поскольку он всегда загружается.

Теперь мы хотим достичь следующего:
* мы хотим сохранить все в одном JS файле (мы знаем, как мы можем загружать файлы по отдельности, просто не хотим этого)
* мы хотим, чтобы пространство имен помещало JS в каждый controller_name.js, поэтому оно загружается только при инициализации соответствующего пространства имен
* мы хотим инициализировать соответствующее пространство имен, читая текущий контроллер, скажем, атрибут data в теге <body> нашего макета

Проблема заключается в следующем: у нас нет хорошей идеи, как реализовать в JS. В частности, как мы должны пропустить пространство JS, а затем динамически инициализировать его на основе содержимого HTML-тега.

Любая помощь очень ценится!

Ответ 1

Вот путь к пространству имен на уровне контроллера/действия

В основном вы объявляете тело таким

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

И затем вызывается эти методы (каждый из которых имеет ряд методов, поэтому, если вам нужно что-то на каждой странице, оно является общим /init. Или для всех действий пользователей, что у пользователей /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