mvc 框架ember.js的简单介绍
什么是Ember.js
Ember.js是一个开源的免费JavaScript客户端框架,用于开发Web应用程序。使用模型-视图-控制器(MVC)模式。该框架提供通用数据绑定,基于网址驱动的方法用于构建不同应用,重点放在可扩展性上
一 什么是MVC、为什么不用MVC
一、MVC的含义:
M(modal):是应用程序中处理数据逻辑的部分。
V (view) :是应用程序中数据显示的部分。
C(controller):是应用程序中处理用户交互的地方(Controller是MVC中的数据和视图的协调者,也就是在Controller里面把Model的数据赋值给View来显示(或者是View接收用户输入的数据然后由Controller把这些数据传给Model来保存到本地或者上传到服务器));
1、通俗易懂的解释下什么是mvc模式:
如果前端没有框架,只使用原生的html+js,MVC模式可以这样理解。将html看成view;js看成controller,负责处理用户与应用的交互,响应对view的操作(对事件的监听),调用Model对数据进行操作,完成model与view的同步(根据model的改变,通过选择器对view进行操作);将js的ajax当做Model,也就是数据层,通过ajax从服务器获取数据(按照上面这种方式分层,感觉多少有点强行MVC,因为Model层被弱化了)。
3:MVC模式有什么缺点
对 DOM 操作的代价非常高
程序运行缓慢且效率低下
内存浪费严重
应用程序复杂性高,难以分工开发。
二:什么是MVVM,MVVM的优点
1:什么是MVVM:
M(modal):模型,定义数据结构。
C(controller):实现业务逻辑,数据的增删改查。在MVVM模式中一般把C层算在M层中,(只有在理想的双向绑定模式下,Controller 才会完全的消失。这种理想状态一般不存在)。
VM(viewModal):视图View的模型、映射和显示逻辑(如if for等,非业务逻辑),另外绑定器也在此层。ViewModel是基于视图开发的一套模型,如果你的应用是给盲人用的,那么也可以开发一套基于Audio的模型AudioModel。
V(view) :将ViewModel通过特定的GUI展示出来,并在GUI控件上绑定视图交互事件,V(iew)一般由MVVM框架自动生成在浏览器中。
MVVM模式在vue中的对应关系
ember 初始化项目
在安装emberjs之前,它应该要求在具有兼容浏览器的系统上安装nodej。在nodejs命令行界面中使用以下命令安装emberjs-
npm install -g ember-cli
ember new my-app
目录结构
├── app
│ ├── components
│ │ └── .gitkeep
│ ├── controllers
│ │ └── .gitkeep
│ ├── helpers
│ │ └── .gitkeep
│ ├── models
│ │ └── .gitkeep
│ ├── routes
│ │ └── .gitkeep
│ ├── styles
│ │ └── app.css
│ ├── templates
│ │ └── application.hbs
│ ├── app.js
│ ├── index.html
│ └── router.js
├── config
│ ├── environment.js
│ ├── optional-features.json
│ └── targets.js
├── public
│ └── robots.txt
├── tests
│ ├── helpers
│ │ └── .gitkeep
│ ├── integration
│ │ └── .gitkeep
│ ├── unit
│ │ └── .gitkeep
│ ├── index.html
│ └── test-helper.js
├── vendor
│ └── .gitkeep
├── .editorconfig
├── .ember-cli
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── .template-lintrc.js
├── .travis.yml
├── .watchmanconfig
├── README.md
├── ember-cli-build.js
├── package.json
├── package-lock.json
└── testem.js
模型—model
模型和路由相关联,因为模型通过作为参数传递到调用路由来实现路由。它操作存储在数据库中的数据。该模型是扩展Ember数据功能的简单类。Ember Data是一个与Ember.js紧密耦合的库,用于存储在数据库中的数据。
视图- - template
创建视图有两个原因:
如果存在处理用户事件的复杂性。
您可以创建可重复使用的组件。
视图负责处理用户事件并更新DOM(文档对象模块)。将评估handlebar模板以创建视图。在模板评估期间,将添加子视图。它通过为最终用户提供丰富的UI,帮助保持应用程序系统的健壮性。
模板是最终用户的强大的UI。您可以直接将模板嵌入到HTML标记中。Ember.js提供了Handlebar模板库来构建前端应用程序,就像普通HTML一样。它还支持正则表达式并动态更新表达式。
控制器—controller
控制器管理模型的显示逻辑,并且还控制路线,模型和视图之间的操作。它从路由获取模型,并在视图,模型和模板之间建立连接。 Ember.js自动创建控制器。
路由—router
路由是应用程序对象的URL表示,并将其转换为嵌套模板。它从它们的模型钩子查询模型,以便在控制器和模板中可用。它在单例路由器对象中声明。
APP(一般是从route、controller或者component发请求)请求数据。
请求并没有直接发送到后端服务而是先在store(ember data其实就是一个store)缓存中查找,ember之所以能实现动态更新模板数据也是因为有了store。
如果请求的数据存在在store中,则直接返回到route、controller或者component;如果在store中没有发现请求的数据,所以请求的数据是首次,数据还未缓存到store中,则请求继续往下到了apdater层。
在adapter中,adapter会根据请求的调用方法构建出对应的URL。比如在route、controller或者component中执行方法findRecord(‘user’, 1),此方法作用是查询id为1的user数据。适配器构建出来的URL为: http://domain/user/1,然后发请求到后端。
适配器会对比后端接受的数据格式与ember data发送的数据格式,如果不一致需要在适配器的``方法中格式化发送的数据格式。请求经过适配器构建得到URL后发送到后端服务,后端服务根据URL请求查询数据库然后格式化数据格式返回到适配器。
适配器根据得到的数据和ember data所接受的数据格式匹配,如果格式不一致需要在适配器的``方法中格式化后端返回的数据。
经过适配器之后数据转到ember data(store)中,首先缓存到store中,然后返回到调用处(route、controller、component)
数据请求完毕
注意:findRecord(‘user’, 1)方法执行过程,请求的findRecord(‘user’, 1)方法会在Ember Data内部解析为find方法,find方法会首先在store缓存中查数据,如果没有则会流转到adapter中组装URL并格式化请求数据,然后发送到后端服务。
从图中看到从适配器返回的数据是promise所以调用findRecord方法获取数据的时候需要then()。同时可见这是个移步请求,只有promises执行成功才能得到数据。也就是说如果考虑周全的话还需要在findRecord的时候处理promises执行失败的情况。
另外如果你想跳过store不需要这层缓存也是可以的。会可以这样做:store.findRecord(type, id, { reload: true })使用reload属性设置为true让每次请求都跳过store直接发送请求到后端,对于实时性要求高的APP则需要这样处理。
介绍完架构之后将追个介绍其中的每个主要的功能特性。
需要说明的是:Models, records, adapters以及store都是Ember Data最核心的东西,他们是包含的关系,只要使用了Ember Data才能使用model、store功能。有些初学者老是问这几个东西的关联,希望看到这里的同学不要在提这样的问题了
mvc 框架ember.js的简单介绍相关推荐
- python mvc框架_MVC其实很简单(Django框架)
Django框架MVC其实很简单 让我们来研究一个简单的例子,通过该实例,你可以分辨出,通过Web框架来实现的功能与之前的方式有何不同. 下面就是通过使用Django来完成以上功能的例子: 首先,我们 ...
- python单元测试框架unittest介绍和使用_Python+Selenium框架设计篇之-简单介绍unittest单元测试框架...
前面文章已经简单介绍了一些关于自动化测试框架的介绍,知道了什么是自动化测试框架,主要有哪些特点,基本组成部分等.在继续介绍框架设计之前,我们先来学习一个工具,叫unittest. unittest是一 ...
- 天龙源码框架分析_网上流传的天龙源码框架分析之一 --- 客户端简单介绍
网上流传一份天龙前身武侠世界的源码,小弟也从朋友那里搞了一份,研究了一下. 90%的源码都看过,每个类的作用基本都了解. 经常有网友问我天龙源码框架的问题,问的人太多了,所以我干脆总结一下算了. 天龙 ...
- 天龙源码框架分析_(转)网上流传的天龙源码框架分析之一 --- 客户端简单介绍...
网上流传一份天龙前身武侠世界的源码,小弟也从朋友那里搞了一份,研究了一下. 90%的源码都看过,每个类的作用基本都了解. 经常有网友问我天龙源码框架的问题,问的人太多了,所以我干脆总结一下算了. 天龙 ...
- 网上流传的天龙源码框架分析之一 --- 客户端简单介绍
网上流传一份天龙前身武侠世界的源码,小弟也从朋友那里搞了一份,研究了一下. 90%的源码都看过,每个类的作用基本都了解. 经常有网友问我天龙源码框架的问题,问的人太多了,所以我干脆总结一下算了. 天龙 ...
- python程序框架的描述_简单介绍Python下自己编写web框架的一些要点
在正式开始Web开发前,我们需要编写一个Web框架. 为什么不选择一个现成的Web框架而是自己从头开发呢?我们来考察一下现有的流行的Web框架: Django:一站式开发框架,但不利于定制化: web ...
- node js Bluebird 简单介绍 promise 解决回调地狱
Promise是异步代码实现控制流的一种方式.这一方式可以让你的代码干净.可读并且健壮. 异步回调如下: fs.readFile('directory/file-to-read', function( ...
- python爬虫框架排行榜-哪种Python框架适合你?简单介绍几种主流Python框架
众所周知,Python开发框架大大减少了开发者不必要的重复劳动,提高了项目开发效率的同时,还使得创建的程序更加稳定.目前比较主流的Python框架都有哪些呢?一般大家用的比较多的是Django.Fla ...
- vue之node.js的简单介绍
一.什么是node.js? 它是可以运行JavaScript的服务平台,可以吧它当做一门后端程序,只是它的开发语言是JavaScript 二.安装 1.node.js的特性: - 非阻塞IO模型 - ...
最新文章
- DATE_FORMAT(date,format)
- 蓝桥杯-9-2 文本加密
- 小明分享|分享8ms平台sigmastar SSD201/SSD202 开源框架的github
- [汇编语言]用[bx+idata]的方式进行数组的处理-字母大小写转换
- 数学三大核心领域概述:代数、几何、分析
- mysql无法与外部健形成约束_MySQL Rails:错误:150“外键约束不正确”
- 个人博客系统毕业设计开题报告
- ubuntu 15.10 安装jdk
- python怎么打包_如何将一整个python工程打包
- cas client 更新ticket_有人知道 cas单点登录系统是怎么样取得proxyticket的?
- 博文视点 疯狂ios讲义之选择器(UIPickerView)
- 基于springboot+vue的大学生健康档案管理系统
- 分享Python入门经典基础题(day1)附完整答案
- 笔记 -凸函数 /KL距离
- 聚焦 ECharts
- java数字时钟界面_Java数字时钟实现代码
- win10投影到电脑无法成功,一直显示即将投影
- java switch语句的升级
- 使用FFmpeg 编解码 FLV的HEVC(H265)格式的视频
- Android中Fragment的分屏显示处理横竖屏显示
热门文章
- 纯C语言日志类库 Zlog
- c语言程序设计第二版(张磊),C语言程序设计教程(第2版) 教学课件 张磊 第9章 文件程序设计.pdf...
- App uni.downloadFile ios问题
- 极线几何[Epipolar Geometry]
- python编码口诀_【每日一练】python输出 9*9 乘法口诀表
- python基础“猜单词游戏”代码
- 数据库 | VirusCircBase:环状 RNA病毒数据库
- 在 Flutter 中自定义画笔 Painter
- 2020考研计算机专业课,2020计算机考研大纲原文
- 小米路由器显示网络未连接到服务器,小米路由器4不能上网了如何解决?小米路由器4无法上网的解决方法汇总介绍...