项目开发(Require + E.js)

最近在做的几个项目,分别用了不同的框架跟方式,有个H5的项目,用了vue框架, 这个项目我还没有正式加入进去, 等手头的这个项目完成就可以去搞vue了, 现在手头的这个项目是一个招聘的项目, 用到了NodeJs,这个主要是用来转接后台的接口,稳定性还是不错的,由一个玩前端的后端童鞋负责,但是对Node我还是一个小白, 在项目中前端的开发环境主要是Require(模块化加载),E.js(数据模板)的开发方式, 这个也是我解除的比较多的,不但现在的项目用到了这个组合, 之前的项目也是这样来的, 所以我把对这套开发方式一些方法跟利与弊总结一下,仅仅只是自己对自己的总结而已~~

 

RequireJS解除的时间比较早了, 我记得我刚开始工作的时候,用的都是一个页面里面放一个JS/或者几个JS文件,,那个时候以为这样就是正确的处理JS的方法,因为那时业务代码也非常的少,也没有回用模块化的同事,大家都是那么耿直的一个JS一个JS的加载着,用着也没什么问题,感觉也挺方便,但是~ 随着业务逻辑多了,功能多了,这样的方式就显得有点不那么友好了,如果一个项目又几十个功能,几十个JS,, 一个一个JS的<script type="text/javascript" src="js/x.js"></script>这样去引用,感觉有点不那么顺畅,用起来也不方便,看起来也很臃肿~   当JS多的时候,Require就显得格外有作用了, 看起来好像十分简洁跟方便,我们只要在一个config的定义文件去引用你需要的JS就可以了~~ 在我的理解中Require就是一个管理以及加载JS的方法/插件~~  先来看下Require是如何用的吧~ 下面是我现在这个项目的Require(config配置内容~)

这里面配置了所有我要用到的JS, 不管是自己写的,还是网上要用到的插件,都可以在这里配置好,要用的时候只要找到它对应的名称引用就好了~~

 

下图面简单说下Requireconfig配置说明

require.config({// 相对路径(可不配置)baseUrl : '',  //(1)当前config引用js的路径// 基于baseUrl路径配置paths: {  //(2)文件的引用路径 可省略后面的.jsjquery     : 'js/plugins/jquery.min',  //为引用的js配置路径和名称dialog  : 'js/plugins/dialog' },// 依赖关系shim: {  //(3)对paths里配置的路径做依赖关系
        jquery: {exports: '$',},dialog : {  //对上面的dialog依赖于jq和ui-dialog.cssdeps : ['jquery', 'css!../css/plugins/ui-dialog']  },},map: {'*': {css: 'js/plugins/require-css/css'}},// 避免加载超时waitSeconds: 0
});

 

配置好了config,那么在页面中是怎么引用的呢, 其实跟普通的JS引用一样, 只是我们只需要引用2个JS文件~~

//统一引用requere插件和config配置文件
<script src="js/require.min.js"></script>
<script src="js/config.js"></script>
<script>require(['js/views/fn1'],function(fn1){ //当前页面需要引用的jsfn1.init();  //回调中的初始化
    });
</script>

 

config配置好以后,页面中也引用了,那么这个fn1.JS中的内容是怎么写的呢~~

/** author       : XX* date         : XX* description  : XX* *///引用的JS用define来引用配置好的JS,
define([  'jquery','dialog'
], function($) { //看引用的JS是否有返回值var _obj = {};  //字面量一个对象/* 定义一个对象初始化的值 */_obj.init = function() {}/* 定义一个对象方法的值 */_obj.method = {}/* 定义一个对象方法的值 */_obj.binEvent = function() {        }//返回对象 return _obj;
});

以上就是Require使用的三个流程,其实目的也就是为了管理JS,让其模块化,一个JS就可以对应一个功能,这个JS中可以引用我们定义的任何方法和插件, 管理起来就会特别的方便,,再也不要一个页面一个页面的去找你要的那个JS或者你要的某段代码~~

 

EJS一个跟Require配合起来特别好使的数据模板,为什么要用数据模板呢,因为后台跟前端配合的多的话,就会有很多数据,如果这些数据都放在页面上的话,管理起来会比较麻烦,Require可以一个JS对应一个功能,那么EJS就可以对应一个数据,EJS其实跟HTML是一样的,只是后缀不一样,还有EJS里面可以直接写入数据~ 可以直接在数据里面做循环,判断,或者我们要的其它操作。~ 下面是一个简单的列表数据模板样式~

<% if(data.length) { %>
<table class="table">
<% for(var i = 0; i < data.length; i++) {%>
<tr data-id="<%= data[i].id %>" data-default="<%= data[i].isDefault %>"><td><%= data[i].name %></td><td><div class="btn-list" data-value="<%= data[i].name %>,<%= data[i].inviteMsg %>,<%= data[i].hrName %>,<%= data[i].phone %>,<%= data[i].address %>,<%= data[i].remark %>" data-notice="<%= data[i].noticeAction %>" data-introduce="<%= data[i].isIntroduce %>"><% if(data[i].isDefault) {%><a href="javascript:;" class="bt default">默认模板</a><% } else {%><a href="javascript:;" class="bt cf-default">设为默认</a><% } %><a href="javascript:;" class="bt cf-copy" data-status="copy">复制</a><a href="javascript:;" class="bt cf-edit" data-status="edit">编辑</a><a href="javascript:;" class="bt cf-delete">删除</a></div></td>
</tr>
<% } %>
</table>
<% } else {%><div class="no-data">暂无数据</div>
<% } %>

EJS中的<% %>是其特有的写法,可以在里面执行JS操作和赋值,那么这个数据模板里面的data(也就是数据)是从哪里来的呢~ 

之前说了Require,当然我们的EJS也是会定义在Require中的config里面的~~

 

JS中的引用~~

define(['text!../../templates/ejs.ejs'  //引入当前需要的数据模板], function(ejsTmp) {  //当前模板的返回值//ajax请求后台数据,将后台数据复制到当前模板中
         $.ajax({url: 'xx/xx', //请求后台数据type: 'post'}).done(function(data) {//填充内筒$('#table').html(ejs.render(ejsTmp, data.data));  //render EJS的模板赋值数据的方法
        }).fail(function() {console.log("error");})});

 

这样我们就可以在我们刚刚的数据文件中对我们的数据进行各种操作了,  当数据量大的时候这样会特别友好, 一个HTML对应一个JS/对应一个EJ ~~ 这样在修改某个模块的时候绝对不会污染到别的模板~~ 不管从以后迭代还是从长远优化来说,都是非常友好的~! 

 

在使用Require + E.js的组合进行开发时, 确实节省了很多不必要浪费的时间,最主要的是维护和修改~  谁用谁知道~!

转载于:https://www.cnblogs.com/htzan/p/6186783.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/253744.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

五个常用的Linux监控脚本代码

bash中 2>&1 & 的解释 1、首先&#xff0c;bash中0&#xff0c;1&#xff0c;2三个数字分别代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO&#xff0c;即标准输入&#xff08;一般是键盘&#xff09;&#xff0c;标准输出&#xff08;一般是显示屏&#xff0c;准…

AHB协议学习

1. 简介 AHB(Advanced High Performance Bus)总线规范是AMBA(Advanced Microcontroller Bus Architecture) V2.0总线规范的一部分&#xff0c;AMBA总线规范是ARM公司提出的总线规范&#xff0c;被大多数SoC设计采用&#xff0c;它规定了AHB (Advanced High-performance Bus)、A…

jquery lazy load

LazyLoad是一个Js编写的Jq插件,它可以延迟加载页面中的图片,在浏览器可视范围中的图片会被加载。如何使用&#xff1a;LazyLoad依赖于Jquery&#xff0c;在html的结尾处 ,就是在</body>前。<script type"text/javascript" src"jquery.js"><…

linux内核中的循环缓冲区

Linux内核中的循环缓冲区&#xff08;circular buffer&#xff09;为解决某些特殊情况下的竞争问题提供了一种免锁的方法。这种特殊的情况就是当生产者和消费者都只有一个&#xff0c;而在其它情况下使用它也是必须要加锁的。 循环缓冲区定义在include/linux/kfifo.h中&#xf…

js的规范写法ES5(自己以后按照这样写)

1、引号的使用&#xff0c;单引号 优先&#xff08;如果不是引号嵌套&#xff0c;不要使用双引号&#xff09; 正常情况&#xff1a;console.log(hello there) 双引号转码&#xff1a; $("<div classbox>") 2、空格的使用问题&#xff1a;&#xff08…

删除本地git的远程分支和远程删除git服务器的分支

在项目中使用git管理代码后&#xff0c;有些时候会创建很多不同名称的分支&#xff0c;以此区分各个分支代码功能。 而随着代码的合并&#xff0c;以前的分支就可能不再需要保存了&#xff0c;所以就要对没有用的分支进行删除&#xff0c;包括紧急回滚时从中抽取某一个版本记录…

数字图像处理——引导滤波

一、概述 引导滤波是由何恺明等人于2010年发表在ECCV的文章《Guided Image Filtering》中提出的&#xff0c;后续于2013年发表。引导过滤器根据局部线性模型原理&#xff0c;通过考虑引导图像的内容来计算过滤输出&#xff0c;引导图像可以是输入图像本身或另一个不同的图像。具…

Ubuntu 18.04换国内源

2019独角兽企业重金招聘Python工程师标准>>> 参考文档&#xff1a; https://blog.csdn.net/zhangjiahao14/article/details/80554616 https://blog.csdn.net/xiangxianghehe/article/details/80112149 1.复制源文件备份&#xff0c;以防万一 我们要修改的文件是sour…

video4linux简介

Video4linux&#xff08;简称V4L),是linux中关于视频设备的内核驱动,现在已有Video4linux2&#xff0c;还未加入linux内核&#xff0c;使用需自己下载补丁。在Linux中&#xff0c;视频设备是设备文件&#xff0c;可以像访问普通文件一样对其进行读写&#xff0c;摄像头在/dev/v…

动态DPC算法学习

造成坏点的原因 感光元件芯片自身工艺技术瑕疵造成;光线采集存在缺陷;制造商产品差异;坏点分类 hot pixel: 固定保持较高的像素值,一般呈现为画面高亮的点;dead pixel: 固定保持较低的像素值,一般在画面中呈现为暗点;noise pixel:信号强度随光照呈现的变化规律不符合正…

windows 邮槽mailslot 在服务程序内建立后客户端无权限访问(GetLastError() == 5)的问题...

邮槽创建在服务程序内&#xff0c;可以创建成功&#xff0c; 但外部客户端连接时 m_hMailslot CreateFile("\\\\.\\mailslot\\zdpMailslot",GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);GetLastError返回错误 5 &#xff0c;无权…

递归下降分析

对于给定的文法G[E] : E→ET|E-T|TT→T*F| T/F|FF→(E)|i 消除左递归后的文法是&#xff1a;E→TE E→TE|-TE|∑ T→FT T→*FT|/FT|∑ F→(E)|i 是否是LL(1)文法&#xff1f; select(E→TE)first(TE){(,i}select(E→TE)first(TE){}select(E→-TE)first(-TE){-}select(E→∑)fol…

SYS简介

"sysfs is a ram-based filesystem initially based on ramfs. It provides a means to export kernel data structures, their attributes, and the linkages between them to userspace.” --- documentation/filesystems/sysfs.txt 可以先把documentation/filesystems/…

数字后端——布图规划

布图规划&#xff08;floorplan&#xff09;与布局&#xff08;place&#xff09;在芯片设计中占据着重要的地位&#xff0c;它的合理与否直接关系到芯片的时序收敛、布线通畅、电源稳定以及良品率。所以在整个芯片设计中&#xff0c;从布图规划到完成布局一般需要占据整个物理…

利用SSH传输文件

在linux下一般用scp这个命令来通过ssh传输文件。 1、从服务器上下载文件scp usernameservername:/path/filename /var/www/local_dir&#xff08;本地目录&#xff09; 2、上传本地文件到服务器scp /path/filename usernameservername:/path 例如scp /var/www/test.php root19…

App WebView实例化

a&#xff0c;高级设置里的环境变量 jdk的配置 b&#xff0c;下载Google的sdk&#xff0c;里面直接包含eclipse 1&#xff0c;新建一个项目 2&#xff0c;起个名字 3&#xff0c;设么走不做&#xff0c;next 4&#xff0c;只操作选择显示的三种方式 5&#xff0c;next什么都不做…

[动态代理三部曲:下] - 从动态代理,看Retrofit的源码实现

前言 关于动态代理的系列文章&#xff0c;到此便进入了最后的“一出好戏”。前俩篇内容分别展开了&#xff1a;从源码上&#xff0c;了解JDK实现动态代理的原理&#xff1b;以及从动态代理切入&#xff0c;学会看class文件结构的含义。 如果还没有看过这俩篇文章的小伙伴&#…

Ti的DM368系列芯片的所有PDF资料汇总

http://www.ti.com/sc/docs/psheets/man_dsp.htm

刘浩(专业打劫三十年)20155307的预备作业02:

我的技能&#xff1f;比大多数人好&#xff1f;经验是什么&#xff1f;与老师的经验的共同之处&#xff1f; 我的技能之一就是单词翻译王——其实看了娄老师的学习经验之后便有些自惭形秽了&#xff0c;我目前的单词量是7300,扇贝上测的&#xff0c;而且测试时是严格的“不会就…

数字后端——电源规划

电源规划是给整个芯片的供电设计出一个均勻的网络&#xff0c;它是芯片物理设计中非常关键的一部分。电源规划在芯片布图规划后或在布图规划过程中交叉完成,它贯穿于整个设计中&#xff0c;需要在芯片设计的不同阶段对电源的供电网络进行分析并根据要求进行修改。&#xff0c;主…