Render Javascript von mehreren Orten: Die Rails Weg

8

Ich habe ein modales Formular, das mit Javascript gerendert wurde. Das Modell heißt Buch .

%Vor%

Anstatt HTML neu zu erstellen und zu bearbeiten, verwende ich coffeescript :

%Vor%

-

%Vor%

Und der Link zum Auslösen des Modals:

%Vor%

Nun, das Problem, dem ich gegenüberstehe, ist, dass dieser Link nur auf der Listenseite des Buches verwendet wurde. So hat der js Callback beim Anlegen 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 Callback (egal welche Callbacks wirklich sind).

Also musste ich dem create.js.coffee etwas wie:

hinzufügen %Vor%

Es scheint irgendwie schmutzig, aber es ist nicht so schrecklich. Das Problem ist, dass ich jetzt mehr als 3 Bedingungen habe, weil die Schaltfläche "Create Book" mehrmals entlang der Webapp verwendet wird.

Also, irgendwelche Ideen über ein Designmuster dafür?

    
Ariel Scherman 13.05.2016, 18:28
quelle

2 Antworten

1

Was du machst, ist nicht schrecklich, aber du könntest ein paar Dinge tun, um es ein bisschen aufzuräumen. Ich würde empfehlen, die Geschäftslogik aus der Ansicht und dem Controller zu entfernen und stattdessen das Presenter-Muster und die Helfermuster zu verwenden. Diese Muster sind in diesen Tagen ziemlich gut dokumentiert und haben eine Reihe von Vorteilen, einschließlich:

  • Förderung von mageren Controllern
  • Förderung kleinerer, prägnanterer Codeabschnitte
  • Förderung des Demeter-Gesetzes
  • erleichtert das Testen von Einheiten

Hier ist eine ziemlich gute Beschreibung des Presenter-Patterns: Ссылка oder: Ссылка

Im Grunde funktioniert das so, dass Sie Ihre Geschäftslogik in eine separate Klasse namens "Presenter" verschieben. Diese Klasse enthält die Logik, die Sie normalerweise in Ihrem Controller behalten würden.

Helfer sind auch ziemlich gut dokumentiert und arbeiten auf die gleiche Weise, aber für Ansichten. Helfer sind viel leichter zu testen als Logik in Ansichten. Für mehr Informationen: Ссылка

Es sieht vielleicht so aus (bitte beachten Sie, dass dies nur ungeprüft ist, "Pseudo" -Code, mit dem ich das Muster illustriere):

%Vor%

In diesem Fall kann die Geschäftslogik in Ihrer Anwendung problemlos mit RSpec oder einem anderen von Ihnen verwendeten Testframework getestet werden. Die Komplexität von JavaScript wird reduziert und das Testen wird einfacher. Ihre JS-Ausgaben können bei Bedarf in verschiedenen Teiltönen getrennt definiert werden oder Sie können den eigentlichen JS-Code von Ihrem Hilfsmodul zurückgeben. Es ist ein komplexes Muster, das zuerst angenommen wird, aber im Laufe der Zeit wird sich alles natürlicher, modularisierter und leichter zu pflegen anfühlen.

    
hightempo 17.06.2016 18:49
quelle
0

Sie sollten in Erwägung ziehen, die Erfolgs- / Fehlerlogik im Controller beizubehalten und stattdessen separate Sichten zu verwenden, die auf Erfolg / Fehlschlag basieren. Sie haben dann eine create_success.js.coffee und eine create_error.js.coffee . Jeder kümmert sich nur um seine eigene Situation und kümmert sich nicht um die andere. HINWEIS: Dies ist Pseudo-Code.

%Vor%     
sp89 18.05.2016 18:06
quelle