【问题标题】:Use of Javascript in an MVC Application在 MVC 应用程序中使用 Javascript
【发布时间】:2011-04-30 07:09:40
【问题描述】:

我是一门课程的助手,学生在 Play 的帮助下实现一个网络应用程序(这是一个类似于 stackoverflow 的问答网站)!框架。这是一个基于 Java 的框架,它依赖于 MVC 模式。模型和控制器是用 Java 编写的,而视图是用 HTML / CSS 编写的,并且框架提供了一些扩展来访问模型的信息。

最近出现的问题是视图中可以使用多少 javascript 来更改模型中的某些内容(例如投票、评论等),从而不会过多地违反 MVC 模式。还是应该避免所有实际更改模型中数据的 Javascript 函数,而是通过控制器路由?有这方面的最佳做法吗?

【问题讨论】:

  • 首先解释一下“实际更改模型中数据的Javascript函数”是什么意思。
  • 例如,您可以对帖子进行投票。 JS 函数将直接调用 post 的相应实例中的方法,从而有效地将控制器排除在操作之外。所以模型是从视图中调用的,而不是从控制器中调用的。我的语言有点不清楚,它不直接改变数据,它通过调用模型的方法来改变数据。

标签: java javascript html model-view-controller frameworks


【解决方案1】:

大概“javascript”是指更多AJAX? (而不是 JS 修改输出......在这种情况下,它只是视图的扩展)。没有理由为什么您的 AJAX 不能/不应该像任何其他组件一样通过您的 MVC 路由。

当然,这可能会促使原始 MVC 设计发生变化,但也许这是课程中可以接受的部分。当然,当使用 AJAX 时,您的视图渲染可以由嵌入在现有视图中的 JS 处理 - 如果数据以 JSON 而不是 HTML 片段的形式提供。

【讨论】:

    【解决方案2】:

    在客户端执行的 JavaScript 代码怎么可能改变“模型中的数据”?您只是在客户端更改对象的 JavaScript 表示中的属性,还是以某种方式从 JavaScript 调用服务器端方法(即调用 servlet)来更改数据?

    如果是后者,那么这违反了 MVC - 来自客户端的所有请求都应该通过控制器。

    【讨论】:

      【解决方案3】:

      我倾向于路由所有需要执行任何 CRUD 操作以向控制器中的函数发送 GET 或 POST 请求的 AJAX 调用,并让它处理与模型的通信。

      这就是 HTML/CSS 视图处理数据的方式(即,从模型中获取数据,通过控制器,并向控制器发送 GET 和 POST 请求)并且由于 JS 是客户端,因此不应对其进行任何处理不同。

      【讨论】:

        【解决方案4】:

        我在我的 CakePHP MVC 应用程序中过度使用 ajax。在这种情况下,控制器操作由 javascript 调用,旁边是一个将 html/javascript 页面传递给浏览器的静态控制器。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多