【问题标题】:I want to perfect my controller-view interaction when i have multiple sets of data当我有多组数据时,我想完善我的控制器视图交互
【发布时间】:2012-08-22 10:28:53
【问题描述】:

我觉得控制器->视图交互错过了一些东西,所以这是我的问题。

我有一个控制器动作正在生成一堆数据:

@first @第二 @第三个

每个变量在视图中显示为一个 html 块(部分)。

有时其中一个或多个会是空的,而我仍然想显示其他的。

我解决此问题的解决方案是在控制器中将变量设置为字符串(“无数据”),因为通常数据是某种数组,我在视图中测试字符串以检查是否有真实数据并做出相应响应。

除此之外,我还有一些用例,我的数据不会总是以相同的部分显示。我知道在调用正确的部分之前,我可以通过一些条件来做到这一点。

我想到的这类问题的一个很好的例子是仪表板,其中某些项目有时会丢失或根据显示的数据而变化。

我已经在使这些用例正常工作,但是通过在视图中放置很多逻辑,我感觉我没有正确地执行 MVC。是否有更好的设计模式(特定于 Rails 与否)来解决这种情况?

【问题讨论】:

    标签: ruby-on-rails model-view-controller design-patterns view controller


    【解决方案1】:

    您可以使用 present 来检查 value 是否存在?在 MVC 中。

    在您的控制器/视图中检查此情况。

    if @first.present?
      do somthing
    end
    

    【讨论】:

      【解决方案2】:

      我认为您的方法没有任何严重问题。您有一些逻辑可以确定数据如何显示的详细信息。你无法逃避这一点。唯一的问题是这个逻辑应该去哪里(它不能消失,唉)。我认为把它放在 View 中是最好的决定。

      不过,我建议让控制器和视图之间的接口尽可能明确。将变量设置为 nil 比将其设置为“无数据”更清晰。您可能需要向模型添加更多变量,以便视图知道该做什么。这比拥有例如更好。一个变量,通常是一个数组,但有时包含一个告诉视图如何显示数据的字符串。

      【讨论】:

        【解决方案3】:

        这似乎是Draper 的工作

        Draper 将 View-Model 插入到 MVC 组合中,该组合位于 Controller 和 View 之间并装饰模型,以面向对象的方式处理所有自定义视图逻辑,同时使其与视图和模型层分开。

        RailsCast on Draper 为例。相当不错(如果你认为它是合乎逻辑的)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-08-20
          • 2016-11-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多