Question

Je travaille sur une application web sans cadre en ce moment, et je suis en train de le structurer comme une application MVC. Le problème est, il y a des aspects techniques des applications MVC qui me échappent.

En premier lieu, comment une vue devrait être construire? Je voudrais utiliser un langage de balisage comme eRuby ou #haml, mais je ne sais pas exactement comment ils fonctionnent et comment les mettre en œuvre dans une application non-Rails.

Comment la vue obtenir des données du modèle et les directions du contrôleur? Dans Rails, tout cela est occulté. Comment puis-je mettre en œuvre ce? Quelle est la théorie derrière tout cela? Est-ce que je fais une connexion à ma base de données dans la vue, puis l'utiliser librement là? Dois-je passer à travers un autre programme en dehors de tout le moteur de rendu #haml pour lui donner des données?

Merci!

Était-ce utile?

La solution

Je n'ai pas encore assez de points pour commenter, mais pour répondre à votre question sur la réponse de cwninja, dans la plupart des cas, vous rendre le formulaire de vue dans une action du contrôleur. Un contrôleur reçoit une requête, exécute l'action à droite et retour est une réponse, dans ce cas une vue rendue que le corps de la réponse. Un exemple simple en utilisant haml pourrait ressembler à ceci:

class SomeController

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

Dans ce cas, les variables d'instance configuration du contrôleur sera effectué automatiquement à la vue car ils sont définis dans le même contexte. Les variables du modèle ne seront pas disponibles car ils ne devraient cependant pas tout ce que vous pouvez accéder à l'action du contrôleur est accessible à partir de la vue. La plupart des systèmes de matriçage vous permettent également de passer le long d'un hachage de variables locales à la vue, par exemple:

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

J'espère que cela efface une partie de votre confusion:)

Autres conseils

simple cas:

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

évaluera le modèle avec le contexte où il est appelé.

Ma façon préférée / simpliste de le faire est d'appeler juste à l'intérieur du contrôleur, et de traiter avec le contrôleur et la vue étant un peu fusionnée.

Si vous ne voulez pas faire cela, vous devez créer une classe de vue, qui a une méthode comme suit:

def get_binding
  binding
end

Ensuite, créez une nouvelle instance, le réglage de tous les variables d'instance, au besoin dans la vue, puis appelez:

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

Ou ... juste renoncer à une utilisation et sinatra.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top