JavaScript模拟实现简单的MVC的示例详解

 更新时间:2023年04月12日 08:44:08   作者:翰玥  
MVC是一种常见的软件架构模式,MVC模式的目的是将应用程序的数据、用户界面和控制逻辑分离,提高代码的可维护性,可拓展性和可重用性。本文就来用用JS模拟实现一个简单的MVC吧

MVC是一种常见的软件架构模式,将一个应用程序分为三个核心的部分:模型(Model)、视图(View)和控制器(Controller)。MVC模式的目的是将应用程序的数据、用户界面和控制逻辑分离,提高代码的可维护性,可拓展性和可重用性。

在我们前端看来:

  • Model模型层,用来获取、存放所有的对象的数据
  • View表现层,呈现信息给用户
  • Controller控制层,模型和视图之间的纽带。

下面我们就按照这三层划分用js实现一个MVC

场景

这里我们就来模拟一个场景。

点击increase按钮,就增加,点击decrease就减少

<body>
	<div id="num"></div>
	<button id="increase">increase</button>
	<button id="decrease">decrease</button>
</body>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.js"></script>
<script src="./index.js"></script>

为了方便操作dom我们引入了jquery。创建一个index.js代码逻辑放到index.js

核心思想

环境已经准备好,下面给我开始搞!

在搞之前,我们首先要知道MVC的核心思想是个啥?开头的时候已经讲过了三个核心的部分,那如何让这三个核心的部分串起来呢?

首先代码运行起来要有一个初始化的过程。Controller是模型和视图之间的枢纽。首先需要对Controller,并且需要在Controller里面对ModelView之间建立关系。初始化的时候将Model中的数据,渲染到View中,同时View层对界面中的行为事件进行监听,如果界面想要修改数据则触发View层中的监听行为,需要在Controller中通知Model层修改数据,然后再展示到界面。

init

const myApp = {};

myApp.Model = function () {}

myApp.View = function () {}

myApp.Controller = function () {}

(function () {
  var controller = new myApp.Controller();
  controller.init();
})();

Controller

myApp.Controller = function () {
  var view, model;

  this.init = function () {
    model = new myApp.Model();
    view = new myApp.View(this);

    model.register(view);
    model.notify();
  };

  this.increase = function () {
    model.add(1);
    model.notify();
  };

  this.decrease = function () {
    model.sub(1);
    model.notify();
  };
};

当执行init的时候,会对ModelView进行初始化,在初始化View时,需要将Controller本身传入。为什么要传入呢?下面看View的时候会介绍。在model中有个register的方法,需要将初始化的view注册到model中,同时需要触发modelnotify完成初始化的整个过程。

View

// View
myApp.View = function (controller) {
  var $num = $("#num"),
    $inc = $("#increase"),
    $dec = $("#decrease");

  this.render = function (model) {
    $num.text(model.getVal() + "rem");
  };

  $inc.click(controller.increase);
  $dec.click(controller.decrease);
};

view中,获取界面需要操作的dom。定义一个render方法,这个方法初始化的时候,会获取model中的数据,渲染到界面上。当数据发生变化的时候,render方法会重新执行,重新渲染。下面两个按钮监听了两个事件,是controllerincreasedecrease方法。这就是为什么需要将controller传入到view中。

Model

//Model
myApp.Model = function () {
  var val = 0;

  this.add = function (v) {
    val += v;
  };

  this.sub = function (v) {
    val -= v;
  };

  this.getVal = function () {
    return val;
  };

  var self = this,
    views = [];

  this.register = function (view) {
    views.push(view);
  };

  this.notify = function () {
    for (var i = 0; i < views.length; i++) {
      views[i].render(self);
    }
  };
};

Model层中,定义了初始值valadd对值增加,sub对值减少。getVal对值的读取。还定义了一个数组views。还记得上面controller的时候model.register(view)吗?初始化的时候,将view存入到modelviews中。notify就是通知view更新的。执行notify的时候,对views中的每个view遍历,然后执行viewrender方法,这就是发布订阅模式。

到此这篇关于JavaScript模拟实现简单的MVC的示例详解的文章就介绍到这了,更多相关JavaScript实现MVC内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 使用Typescript开发微信小程序的步骤详解

    使用Typescript开发微信小程序的步骤详解

    这篇文章主要介绍了使用Typescript开发微信小程序的步骤详解,本文分步骤通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • Firefox中beforeunload事件的实现缺陷浅析

    Firefox中beforeunload事件的实现缺陷浅析

    beforeunload 指在页面卸载前提供的最后一次JS执行的机会
    2012-05-05
  • 这应该是最详细的响应式系统讲解了

    这应该是最详细的响应式系统讲解了

    这篇文章主要介绍了这应该是最详细的响应式系统讲解了,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • MVVM框架下实现分页功能示例

    MVVM框架下实现分页功能示例

    分页这种组件,几乎每一种框架都有这样的组件,这篇文章主要介绍了MVVM框架下实现分页功能示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-06-06
  • JavaScript中的公有、私有、特权和静态成员用法分析

    JavaScript中的公有、私有、特权和静态成员用法分析

    这篇文章主要介绍了JavaScript中的公有、私有、特权和静态成员用法,以实例形式分析了其使用方法,简单易懂,对于初学javascript的朋友具有不错的学习与借鉴价值,需要的朋友可以参考下
    2014-11-11
  • JavaScript如何处理移动端拍摄图片旋转问题

    JavaScript如何处理移动端拍摄图片旋转问题

    这篇文章主要告诉大家JavaScript如何处理移动端拍摄图片旋转问题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • JavaScript函数的使用教程

    JavaScript函数的使用教程

    这篇文章主要介绍了JavaScript函数的使用教程,JavaScript函数是被设计为执行特定任务的代码块。JavaScript函数会在某代码调用它时被执行。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • js实现前端界面导航栏下拉列表

    js实现前端界面导航栏下拉列表

    这篇文章主要为大家详细介绍了js实现前端界面导航栏下拉列表,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • JavaScript判断数组是否存在key的简单实例

    JavaScript判断数组是否存在key的简单实例

    下面小编就为大家带来一篇JavaScript判断数组是否存在key的简单实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-08-08
  • javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码

    javascript showModalDialog 多层模态窗口实现页面提交及刷新的代码

    javascript 多层模态窗口showModalDialog页面提交及刷新
    2009-11-11

最新评论