У меня есть модальная форма, отображаемая через javascript. Модель называется книга.Render javascript из нескольких мест: Rails way
# controllers/books_controller.rb
def new
@book = Book.new
end
def create
@book = Book.find(params[:id])
@book.save
end
Вместо того, чтобы новые и редактировать HTML, я использую CoffeeScript:
# views/new.js.coffee
CustomModal.open "<%= j render('books/modal_form', book: @book) %>"
-
# views/create.js.coffee
<% if @book.valid? %>
CustomModal.hide()
# Other callback scripts for showing alert, etc
<% else %>
# Script for showing errors in the modal
<% end %>
И ссылки для запуска модальный:
= link_to "Create Book", new_book_path, remote: true
Теперь проблема заключается в том, что эта ссылка использовалась только на странице списка книг. Таким образом, js callback, когда книга была создана, вызвала предупреждение и обновила список с изменениями.
Теперь я должен добавить эту кнопку на другую страницу, где нет списка, поэтому мне нужен другой обратный вызов (неважно, какие обратные вызовы действительно).
Таким образом, я должен был добавить к create.js.coffee что-то вроде:
# views/create.js.coffee
<% if @book.valid? %>
CustomModal.hide()
# if the list exists
# show alert
# update lists
# else
# do different things
# end
<% else %>
# Script for showing errors in the modal
<% end %>
Кажется, вид грязный, но это не так ужасно. Проблема в том, что теперь у меня более 3 условных выражений, потому что кнопка «Создать книгу» используется несколько раз вдоль веб-приложения.
Итак, любые идеи о шаблоне дизайна для этого?
Мне нравится подход возврата coffeescript. У этого есть хорошее чувство об этом, будучи немного статически динамичным. Когда вы просите «идеи о шаблоне проектирования для этого», что именно вы ищете в ответ? –
Я ищу шаблон, который делает всевозможные возможности легкими для mantain и т. Д. –
Как насчет того, чтобы не возвращать реальный скрипт, а просто вызывать обратный вызов, который может быть определен по-разному на каждой странице, где вам нужна ссылка? Что-то вроде: если обратный вызов определен, вызовите обратный вызов , иначе сделайте материал по умолчанию – michalvalasek