2010-01-25 5 views
1

지금 프레임 워크가없는 웹 응용 프로그램을 만들고 MVC 응용 프로그램으로 구조화하려고합니다. 문제는 나를 탈출하는 MVC 앱의 기술적 측면이 있다는 것입니다.뷰는 어떻게 작동합니까 (MVC)?

주로보기를 어떻게 작성해야합니까? eRuby 나 #haml과 같은 마크 업 언어를 사용하고 싶지만 정확하게 작동하는 방법과 비 Rails 응용 프로그램에서이를 구현하는 방법을 모르겠습니다.

보기에서 컨트롤러의 모델 및 길 찾기에서 데이터를 가져 오는 방법은 무엇입니까? Rails에서, 이것은 모두 모호하다. 어떻게 구현할 수 있습니까? 이것의 뒤에 이론은 무엇입니까? 뷰에서 내 데이터베이스에 연결 한 다음 자유롭게 사용합니까? #haml 렌더러를 제외한 다른 프로그램을 통해 데이터를 전달합니까?

감사합니다.

답변

2

아직 코멘트가 충분하지 않지만 cwninja의 답변에 대한 질문에 대답하기 위해 대부분의 경우 컨트롤러 작업 내에서보기 양식을 렌더링합니다. 컨트롤러는 요청을 받고, 올바른 액션을 실행하고 응답을 반환합니다.이 경우 응답 본문으로 렌더링 된 뷰입니다. 같을 수 HAML를 사용하여 간단한 예 : 그들은 동일한 맥락에서 정의되기 때문에 제어기 이때 인스턴스 변수 설정에서

class SomeController 

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

자동으로 볼 수 있도록한다. 모델의 변수는 사용할 수 없으므로 사용할 수 없지만 컨트롤러 조치에서 액세스 할 수있는 모든 것은보기에서 액세스 할 수 있습니다. 대부분의 템플릿 시스템은 예를 들어, 당신이보기에 지역 변수의 해시 함께 전달할 수 :

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

나는이

+0

감사합니다! 이것은 완전히 내 질문에 대답 - 환호! – Isaac

+0

위대한, 내가 도울 수있어서 기쁘다. – pmh

1

간단한 경우 :

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

이이 호출 곳의 컨텍스트 템플릿을 평가합니다.

내 선호/단순한 방법은 컨트롤러 내부에서 호출하여 컨트롤러 및 뷰를 약간 병합하는 것입니다.

def get_binding 
    binding 
end 

그런 다음 새로운 인스턴스를 생성에 필요한 모든 인스턴스 변수를 설정 : 당신이 그렇게하지 않으려면

, 당신은 다음과 같은 방법이있다 뷰 클래스를 작성해야 보기, 그럼 전화 :

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

또는 ... 그냥 포기하고 사용 sinatra.

+0

이 조금 일을 지 웁니다 당신의 혼란 :)의 일부 정리할 희망 - 하나 thing : MVC를 엄격하게 유지하면서 View에 물건을 어떻게 공급합니까? HTML로 렌더링하기 위해 뷰를 처리하는 곳과 뷰에서 필요한 모델의 변수를 얻는 방법은 무엇입니까? – Isaac

+0

레일즈는 모든 인스턴스 변수를 컨트롤러에서 뷰로 복사합니다 (helper_methods를 위임하기위한 '마법'과 함께). 컨트롤러가 뷰 객체를 생성하고 렌더링 할 수없는 것은 아닙니다. – cwninja

관련 문제