Pergunta

Estou trabalhando em um aplicativo da web sem estrutura no momento e tentando estruturá-lo como um aplicativo MVC.O problema é que existem alguns aspectos técnicos dos aplicativos MVC que me escapam.

Principalmente, como uma visão deve ser construída?Gostaria de usar uma linguagem de marcação como eRuby ou #haml, mas não sei exatamente como elas funcionam e como implementá-las em um aplicativo não Rails.

Como a visualização obtém dados do modelo e instruções do controlador?No Rails, tudo isso é ofuscado.Como posso implementar isso?Qual é a teoria por trás disso?Faço uma conexão com meu banco de dados na view e depois uso ele livremente lá?Devo passar por outro programa além do renderizador #haml para fornecer dados?

Obrigado!

Foi útil?

Solução

Ainda não tenho pontos suficientes para comentar, mas para responder sua pergunta sobre a resposta do cwninja, na maioria dos casos você renderiza o formulário de visualização dentro de uma ação do controlador.Um controlador recebe uma solicitação, executa a ação correta e retorna uma resposta, neste caso uma visualização renderizada como corpo da resposta.Um exemplo simples usando haml poderia ser assim:

class SomeController

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

Neste caso, as variáveis ​​​​de instância configuradas no controlador serão automaticamente disponibilizadas para a visualização, pois são definidas no mesmo contexto.As variáveis ​​do modelo não estarão disponíveis como deveriam, porém qualquer coisa que você possa acessar a partir da ação do controlador pode ser acessada a partir da visualização.A maioria dos sistemas de templates também permite passar um hash de variáveis ​​locais para a visualização, por exemplo:

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

Espero que isso esclareça um pouco da sua confusão :)

Outras dicas

Caso simples:

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

Isto avaliará o modelo com o contexto de onde ele é chamado.

Minha maneira preferida/simplista de fazer isso é apenas chamá-lo dentro do controlador e lidar com o controlador e a visualização sendo um pouco mescladas.

Se você não quiser fazer isso, você precisa criar uma classe de visualização, que tenha um método como segue:

def get_binding
  binding
end

Em seguida, crie uma nova instância, definindo todas as variáveis ​​de instância conforme necessário na visualização e chame:

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

Ou… simplesmente desista e use o sinatra.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top