Frage

Ich arbeite an einem Web-App ohne einen Rahmen gerade jetzt, und ich versuche, es als ein MVC-app zu strukturieren. Das Problem ist, gibt es einige technische Aspekte der MVC-Anwendungen, die Flucht mir.

In erster Linie, wie sollte eine Ansicht bauen? Ich mag eine Markup-Sprache wie eRuby oder #haml verwenden, aber ich weiß nicht, wie genau sie arbeiten und wie sie in einer nicht-Rails-Anwendung zu implementieren.

Wie die Ansicht Daten erhält aus dem Modell und Richtungen von der Steuerung? In Rails, das ist alles verschleiert. Wie kann ich das umsetzen? Was ist die Theorie dahinter? Mache ich eine Verbindung zu meiner Datenbank in der Ansicht und dann verwenden, frei da? Habe ich es durch ein anderes Programm übergeben, abgesehen von nur der #haml Renderer ihm Daten zu geben?

Danke!

War es hilfreich?

Lösung

Ich habe noch nicht genug Punkte zu kommentieren, aber Ihre Frage auf cwninja Antwort zu beantworten, in den meisten Fällen machen die Ansicht Form innerhalb einer Controller-Aktion. Ein Controller erhält eine Anfrage, führt die richtige Aktion und Rücklauf ist eine Reaktion, in diesem Fall eine gerenderte Ansicht als Antwort Körper. Ein einfaches Beispiel haml mit könnte wie folgt aussehen:

class SomeController

 def some_action
   @foo = "bar"
   Haml::Engine.new(template).render(self)
 end
end

In diesem Fall Instanzvariablen Setup in der Steuerung automatisch zur Ansicht zur Verfügung gestellt werden, da sie im gleichen Kontext definiert sind. Variablen aus dem Modell nicht zur Verfügung, da sie sollten jedoch nicht alles, was Sie von der Controller-Aktion zugreifen können, kann aus der Sicht zugegriffen werden. Die meisten Templating-Systeme auch ermöglichen es Ihnen entlang eines Hash von lokalen Variablen zu der Ansicht zu übergeben, zum Beispiel:

   Haml::Engine.new(template).render(self, {:foo => "bar"})

Ich hoffe, das klärt einige Ihrer Verwirrung:)

Andere Tipps

Einfacher Fall:

ERB.new("your_template.erb").result(binding)

Dies wird die Vorlage mit dem Kontext bewerten, wo es heißt.

Mein bevorzugter / simple Art und Weise, dies zu tun ist es gerade in der Steuerung zu nennen, und befaßt sich mit der Steuerung und sieht sein ein wenig zusammengeführt werden.

Wenn Sie nicht das tun wollen, müssen Sie eine Ansichtsklasse erstellen, das ein Verfahren ist wie folgt:

def get_binding
  binding
end

Dann eine neue Instanz erstellen, das Setzen alle Instanzvariablen wie in der Ansicht benötigt, dann rufen Sie:

view = ViewClass.new
view.object = my_data_from_the_db
return [200, {…}, [ERB.new("your_template.erb").result(view.get_binding)] ]

oder ... nur eine und Verwendung sinatra aufgeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top