【问题标题】:Javascript MVC - separate logicJavascript MVC - 单独的逻辑
【发布时间】:2012-04-16 03:22:17
【问题描述】:

我目前在 Javascript 中使用自己的 MVC 框架设置,但我有点困惑,我应该把 HTML 事件处理程序放在哪里。

像单击/鼠标/焦点事件之类的东西,是否可以将此事件逻辑附加到控制器中。

现在,我有这样的:

  • Some-module.model.js
  • Some-module.view.js(我在其中附加用户事件,如鼠标事件、焦点等)
  • Some-module.view.tpl(这是 HTML 被放置在脚本标签、迷你模板引擎之间的位置)
  • Some-module.controller.js

那么,将视图的点击处理程序附加到控制器中是否明智?还是那是不好的做法?

【问题讨论】:

  • 我认为这正是视图控制器类的用途,是的。

标签: javascript model-view-controller


【解决方案1】:

好的,谢谢大家!

我要做什么:

/控制器/ -> 一些模块.js

/模型/ -> 一些模块.js (保存数据、跟踪状态、检索数据)

/视图/ -> 一些模块.js (附加 DOM 事件,DOM 操作,将检索模板 TPL 文件并使用它)

/模板/ -> 一些模块.tpl (script-tags 中的实际视图,类似于 mustache 或 Jquery Templates,允许我在模板中使用 variable-tags)

这将使我的应用程序保持有序和模块化。

我可以考虑在控制器内部处理 DOM 事件,但我还需要一个位置来执行一些 DOM 操作(更改类名、更改 innerHTML 值等),我认为控制器不是这样做的正确方法。

【讨论】:

    【解决方案2】:

    将事件处理程序放在控制器类中并不是一个坏习惯。事实上,JavaScriptMVC 库使用 Controller 类来组织所有事件处理程序(尽管这不是 Controller 类的唯一目的)。

    将事件处理程序放在 View 类中也不错,因为 Backbone.js 使用它来组织与特定 DOM 元素关联的所有事件处理程序。

    有很多前端 MVC 设计模式,没有一个样板可以完美地适应所有情况。

    【讨论】:

      【解决方案3】:

      将 javascript 和所有 DOM 操作保存在 js 文件中。

      Separation of concerns

      顺便说一句:Controller 在 MVC 中类似于 keyword,您可能希望将 js 文件名更改为其中没有控制器的名称。

      【讨论】:

      • 但是控制器是一个JS文件......如何控制与它的视图的交互与控制器无关?
      • 好吧,我在文件名中保留了“控制器”,很高兴看到我在开发时正在编辑什么样的文件。部署站点时,所有 JS 文件将自动合并。但是“将所有 DOM 操作保存在 JS 文件中”是什么意思?
      • @barry。比如$('.foo').addClass('bar').val('a value');$('#foo').change();$('#foo').hide();等'
      • @gdoron:所以 DOM 操作进入了视图部分,对吧?并在视图内附加点击事件?在那种情况下,我有两个视图,一个是模板,另一个是用于附加用户事件和 DOM 操作?
      • @barry。一两个文件并不重要。我建议将它放在视图中的js 文件中。不直接在视图中。
      猜你喜欢
      • 2021-02-21
      • 2018-02-24
      • 1970-01-01
      • 2014-06-12
      • 2021-02-24
      • 1970-01-01
      • 2014-08-14
      • 1970-01-01
      • 2011-09-03
      相关资源
      最近更新 更多