1

我现在正在开发一个没有框架的网络应用程序,并且我正在尝试将其构建为 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)] ]

或者……放弃一个并使用 sinatra。

于 2010-01-25T21:20:08.093 回答