2010-11-25 5 views
0

Diese Frage bezieht sich auf die gestellte Frage here, bezüglich der Best Practice für die Handhabung von Tabbed-Interfaces. Es bezog sich auf einen Blog-Beitrag mit dem Titel, Warum der Zend Framework Actionstack ist Evil, die umriss, dass Sie Partials und View Helper für Elemente verwenden sollten, die wiederverwendet werden. Dies ist in Ordnung, bis das Element einige Eingaben verarbeiten muss. In diesem Fall sind View-Helfer nicht die Antwort. Dies ist, wo Sie Action-Helfer verwenden, Matthew Weier O'Phinney spricht über einen Anwendungsfall dafür in seinem Blog-Beitrag mit dem Titel "Verwenden von Action-Helper, um wiederverwendbare Widgets zu implementieren".Controller, Action-Helfer oder View-Helfer für Multi-Level-Registerkarten-Schnittstelle

Nach dem Lesen dieser Standpunkte bin ich auf dem besten Weg für meine Schnittstelle verwirrt. Die Website wird aus drei großen Registerkarten bestehen: Fälle, Personal, & Abteilungen. Jede dieser Registerkarten folgt einem ähnlichen Layout, das aus einer Auswahl-/Suchtabelle, einer Zusammenfassung (Fall | Mitarbeiter | Abteilung) und einem anderen Bereich mit einem vertikalen Registerkartenmenü besteht. Die Hauptregisterkarten haben einige vertikale Registerkartenelemente, die bis auf die angezeigten Informationen identisch sind.

Die Frage ist, wie ich die Ansichten, Helfer und Controller um diese Schnittstelle strukturiere. Ich dachte daran, einen Index, einen Fall, Mitarbeiter und Abteilungsleiter zu haben. Erstellen eines Aktions-Helfers, der eine Ansicht für jede wichtige Registerkarte wiederverwenden wird, aber die Anforderungsdaten verwendet, um die aktuell ausgewählte (Fall | Personal | Abteilung) zu bestimmen. Verwenden Sie die einzelnen Registerkarten-Controller, um jQuery-Ajax-Anforderungen für den Inhalt der vertikalen Registerkarte zu bearbeiten, und delegieren Sie die Ausgabe an einen Ansichtshelfer, der eine allgemeine Ansicht wiederverwenden wird. Verwenden Sie auch die einzelnen Tab-Controller, um jQuery-Ajax-Crud-Operationen zu bearbeiten.

Ist dies der beste Weg, oder gibt es bessere, effizientere Methoden?

Antwort

1

Ich würde separate Controller für jede Ihrer drei Hauptregisterkarten erstellen. Die vertikalen Registerkarten, die Sie beschreiben, entsprechen den Aktionen auf diesen Controllern.

Zum Rendern all dieser Navigations-Tabs - Top-Level und die Verticals - es klingt wie die Antwort ist .... Zend_Navigation (more info).

Sie können alle strukturierten Navigationsdaten - wahrscheinlich aus einer INI-Datei oder aus einer XML-Datei oder sogar aus einem strukturierten Array gelesen - in einen einzigen Zend_Navigation Container einfügen und dann den "aktiven" Zweig rendern.

+0

Vielen Dank für Ihre prompte Antwort. Das ist genau das, was ich bisher gemacht habe, aber was mich beunruhigt, ist, dass ich das gleiche Design für die Hauptregisterkarten habe, aber drei verschiedene Ansichten für sie habe. Und für die Vertikalen, auf die Ajax zugreift, verwenden sie auch das gleiche Design, verwenden aber unterschiedliche Ansichten. Um die Praxis von Fettmodellen und mageren Controllern beizubehalten, sollte ich nicht wiederverwendbare Helfer (view | action) zum Rendern und Verwalten dieser Ansichten erstellen? – Rod

+0

Ich würde 1 Aktion für alle Tabs verwenden, und dann in der Ansicht Partials verwenden, um jeden Tab-Inhalt zu rendern (so dass, wenn Sie den Tab ändern, müssen Sie die Seite nicht neu laden), alle wie von David erwähnt Zend_Navigation um die Registerkarten anzuzeigen, um den Controller dünn zu halten, können Sie die meisten Tab-Daten innerhalb eines Modells unter 3 verschiedenen Methoden verschieben (eine für jede Registerkarte, oder mehr, wenn ein Teil des Codes in anderen Bereichen wiederverwendet wird) App) hart ich weiß nicht, wie dies die Leistung beeinflussen wird, aber es wird die Benutzererfahrung verbessern. –

+0

Ich sehe @ Poelinca Punkt: vielleicht einen einzigen Controller w/3 Aktionen. Jede Aktion kann alle Aufgaben ausführen, die zum Füllen der vertikalen Registerkarten erforderlich sind. Dann ein paar coole Dinge auf der Clientseite, damit Sie alles ohne Neuladen der Seite sehen können. Aber ich denke deine Frage ist mehr als das. Diese drei "Seiten" klingen "strukturell" ähnlich: Suchtabelle, Zusammenfassung, Tabs. Es scheint also vernünftig zu sein, einen Aktionshelfer zu erstellen, der ausreichend parametrisierbar ist, um die benötigten Daten zu erhalten (Suchtabelle, Zusammenfassung, etc.) und dann einen ähnlich parametrisierten View-Helper und Partials für das Rendering zu verwenden. Wenn es wirklich so ähnlich ist. –

Verwandte Themen