質問

私は今のフレームワークなしでウェブアプリに取り組んでいる、と私は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)] ]

それとも...ただし、使用シナトラをあきらめます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top