我正在一个web应用程序没有一个框架,现在,我试图构建它作为一个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