2011-08-30 91 views
1

我正在学习RoR,两个不同的源以不同的方式描述View与浏览器的关系。一个来源将Controller描述为在与View交互之后向浏览器返回请求。另一个来源描述了View从Controller收到指令后直接返回给浏览器的请求。所以我应该理解Controller在浏览器和View之间,还是View在Controller和浏览器之间?Ruby on Rails MVC说明

+0

为什么不能都是对的? – ghoppe

+0

它们被描述的方式都是有意义的,并且似乎是兼容的。但是,我想要明确理解前进的方向。 –

回答

3

我认为这两种解释都是部分正确和部分错误,因为它们都是粗略的简化。

当请求传递给控制器​​时,它执行与请求的动作相对应的方法。该方法完成的其中一件事就是渲染视图 - 这就是render的功能。如果你没有明确地调用渲染,它会被默认的参数调用。两者之间没有真正的“介于”另一个和浏览器之间,但控制器能够自行响应请求,而视图不是。

1

控制器使用视图返回请求。可以在没有视图的情况下响应一个请求(通过重定向,不渲染任何东西,静态字符串,JSON或XML--虽然你可能会认为后面三个是控制器内部的视图逻辑),但不响应请求没有控制器。

1

我不是RoR专家。但从技术和架构的角度来看,我们应该将所有标准MVC框架中的视图都视为passive。这意味着它从不“做”任何事情 - 视图就像某种UI模板一样工作,描述屏幕(或页面)应该如何呈现。

因此,最终控制器将根据视图定义呈现基于的HTML页面,并将其提供给最终用户。

+0

实际上控制器将它传递给Web服务器,但是,视图只有表示逻辑。 – ghoppe

+0

ghoppe:其实这是[nitpick](http://dictionary.reference.com/browse/nitpick)。 :)但是,你说得对。 – rsenna

+0

我喜欢挑剔。没有违法意图。 :) – ghoppe