如何做一个视图的工作(MVC)?
-
22-09-2019 - |
题
我正在一个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)] ]
或者......干脆放弃了和使用西纳特拉。
不隶属于 StackOverflow