1

現在、フレームワークなしで Web アプリに取り組んでおり、MVC アプリとして構造化しようとしています。問題は、MVC アプリの技術的な側面がいくつかあることです。

主に、ビューはどのように構築する必要がありますか? eRuby や #haml などのマークアップ言語を使用したいのですが、それらがどのように機能し、Rails 以外のアプリケーションでどのように実装するかがわかりません。

ビューはどのようにモデルからデータを取得し、コントローラーから指示を取得しますか? Rails では、これはすべて難読化されています。どうすればこれを実装できますか? これの背後にある理論は何ですか?ビューで自分のデータベースに接続し、そこで自由に使用できますか? #haml レンダラーだけでなく、別のプログラムを介してデータを渡す必要がありますか?

ありがとう!

4

2 に答える 2

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"})

これで混乱が解消されることを願っています:)

于 2010-01-26T10:06:16.520 に答える
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)] ]

または… あきらめて、シナトラを使用してください。

于 2010-01-25T21:20:08.093 に答える