Интересный дизайн. Я вижу вашу потребность, но что вы собираетесь делать, когда требования немного меняются, так что в ответ на Foo.Epsilon app_1 должен отправить либо Bar.Gamma или Bar.Whatsit?
Решение, которое вы рассмотрели и отбросило как хакерское (помещая отношение в карту), кажется, дает вам гораздо большую гибкость и позволяет избежать вашей циркулярной ссылки. Он также сохраняет ответственность разделенной: сами типы сообщений не должны нести ответственность за знание их ответа, не так ли?
Это - старый вопрос, но я предполагаю, что это не работает, потому что Вы используете turbolinks, и эти $('.file .file-input')
только активируется, если что-нибудь соответствующее тому селектору будет доступно на странице, когда js выполняется (так на первой загрузке).
Вместо этого пишут Ваш код следующим образом:
$(document).on "change", ".file .file-input", ->
Это получит любой change
на уровне документа и проверит, применяется ли селектор. Таким образом, это означает, что обратный вызов будет всегда работать как ожидалось, независимо от содержания на странице, которая могла бы / быть динамично добавленной позже.