どのようにビューの仕事(MVC)?
-
22-09-2019 - |
質問
私は今のフレームワークなしでウェブアプリに取り組んでいる、と私はMVCアプリとしてそれを構築しようとしています。で、MVCのいくつかの技術的な側面がある問題は、それが私を脱出アプリ。
主に、どのようにビューを構築すべきですか?私はeRubyまたは#hamlのようなマークアップ言語を使用したいのですが、私は、彼らがどのように動作するかを正確に知っているとどのように非Railsアプリケーションでそれらを実装しないでください。
どのようにビューコントローラからモデルや方向からデータを取得していますか? Railsでは、これはすべての難読化されています。私はこれをどのように実装することができますか?この背後にある理論は何ですか?私は、ビューの私のデータベースへの接続を行い、その後、自由にそこにそれを使用していますか?私はそれはそれにデータを与えるために脇だけ#hamlレンダラから別のプログラムを通過する必要がありますか?
ありがとうございます。
解決
私はまだコメントへの十分なポイントを持っていませんが、ほとんどの場合、あなたは、コントローラのアクション内のビューのフォームをレンダリングし、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"})
私は、これはあなたの混乱の一部をクリア願っています:)
他のヒント
シンプルなケースます:
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)] ]
それとも...ただし、使用シナトラをあきらめます。