Ich habe ein modales Formular über Javascript gerendert. Das Modell heißt Buch.Render Javascript von mehreren Orten: Die Schienen Weg
# controllers/books_controller.rb
def new
@book = Book.new
end
def create
@book = Book.find(params[:id])
@book.save
end
Statt die neue und bearbeiten html zu haben, benutze ich Coffee:
# 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 %>
und die Verbindung zum Auslösen des modal:
= link_to "Create Book", new_book_path, remote: true
Jetzt ist das Problem, das ich gegenüberstelle, dass dieser Link nur auf der Listenseite des Buches verwendet wurde. So hat der js-Callback beim Erstellen des Buchs eine Warnung ausgelöst und die Liste mit den Änderungen aktualisiert.
Jetzt muss ich diesen Knopf auf einer anderen Seite hinzufügen, wo es keine Liste gibt, also brauche ich einen anderen Rückruf (egal welche Rückrufe wirklich).
# 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 %>
Es scheint etwas schmutzig, aber es ist nicht so schlimm:
Also, ich mag zum create.js.coffee etwas hinzugefügt hatte. Das Problem ist, dass ich jetzt mehr als 3 Bedingungen habe, weil die Schaltfläche "Create Book" mehrmals in der Webapp verwendet wird.
Also, irgendwelche Ideen über ein Design-Muster dafür?
Ich mag den Ansatz der Rückgabe von Coffeescript. Es hat ein gutes Gefühl und ist ein bisschen statisch dynamisch. Wenn Sie nach "Ideen zu einem Designmuster dafür" fragen, was genau suchen Sie in einer Antwort? –
Ich bin auf der Suche nach einem Muster, das alle verschiedenen Möglichkeiten leicht zu pflegen, etc. –
Wie wäre es mit dem eigentlichen Skript, sondern nur Callback aufrufen, die auf jeder Seite unterschiedlich definiert werden könnte, wo Sie den Link benötigen? Etwas wie: Wenn Rückruf definiert ist, rufen Sie den Rückruf sonst die Standard-Zeug – michalvalasek