Pregunta

Estoy trabajando en una aplicación Web sin un marco en este momento, y estoy tratando de estructurar como una aplicación MVC. El problema es que hay algunos aspectos técnicos de aplicaciones MVC que se escapan de mí.

En primer lugar, ¿cómo debe ser una visión de construcción? Me gustaría utilizar un lenguaje de marcas como eRuby o #haml, pero no sé exactamente cómo funcionan y cómo ponerlas en práctica en una aplicación no-carriles.

¿Cómo obtener la opinión de datos del modelo y las instrucciones desde el controlador? En Rails, esto es todo lo ofuscado. ¿Cómo puedo aplicar esto? ¿Cuál es la teoría detrás de esto? Hago una conexión con mi base de datos en la vista y luego usarlo libremente allí? ¿Tengo que pasar a través de otro programa aparte de sólo el procesador #haml para darle los datos?

Gracias!

¿Fue útil?

Solución

Yo todavía no tengo suficientes puntos para hacer comentarios, pero para responder a su pregunta sobre la respuesta de cwninja, en la mayoría de los casos renderizar la vista de formulario dentro de una acción del controlador. Un controlador recibe una solicitud, ejecuta la acción correcta y el regreso de una respuesta, en este caso una vista renderizada como el cuerpo de la respuesta. Un ejemplo sencillo usando haml podría tener este aspecto:

class SomeController

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

En este caso la configuración variables de instancia en el controlador automáticamente será puesto a disposición del punto de vista, ya que se definen en el mismo contexto. Las variables del modelo no estarán disponibles, ya que no deben, sin embargo, nada se puede acceder desde la acción del controlador se puede acceder desde la vista. La mayoría de los sistemas de plantillas también le permiten pasar a lo largo de un hash de las variables locales a la vista, por ejemplo:

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

Espero que esto aclare un poco de su confusión:)

Otros consejos

Caso sencillo:

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

Esta evaluará la plantilla con el contexto de donde se llama.

Mi forma preferida / simplista de hacer esto es simplemente llamarlo dentro del controlador, y el trato con el controlador y la vista que se está un poco fusionó.

Si no quieres hacer eso, es necesario crear una clase de vista, que tiene un método de la siguiente manera:

def get_binding
  binding
end

A continuación, crear una nueva instancia, el establecimiento de todas las variables de instancia, según sea necesario en la vista, a continuación, llamar:

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

O ... simplemente renunciar a un uso y Sinatra.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top