最近在做的几个项目,分别用了不同的框架跟方式,有个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)文件的引用路径 可省略后面的.js
jquery : 'js/plugins/jquery.min', //为引用的js配置路径和名称
dialog : 'js/plugins/dialog'
}, // 依赖关系
shim: { //(3)对paths里配置的路径做依赖关系
jquery: {
exports: '$',
},
dialog : { //对上面的dialog依赖于jq和ui-dialog.css
deps : ['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){ //当前页面需要引用的js
fn1.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的组合进行开发时, 确实节省了很多不必要浪费的时间,最主要的是维护和修改~  谁用谁知道~!

项目开发(Require + E.js)的更多相关文章

  1. 项目开发---使用node.js中sass语法

    前言:本文中所有sass文件都指后缀名为scss的文件.在此也建议使用后缀名为scss的文件,以避免sass后缀名的严格格式要求报错. 一.sass插件的安装: gulp-sass-china //  ...

  2. Vue 实战项目开发流程

    一 基础配备 ## 一.环境搭建 #### 1.安装node - 去[官网](https://nodejs.org/zh-cn/)下载node安装包 - 傻瓜式安装 - 万一安装后终端没有node环境 ...

  3. r.js压缩打包(require + backbone)项目开发文件

    最近项目稳定了一点,之前一直没空关注的开发文件压缩打包问题也有时间来解决了 AMD模块化开发中的代码压缩打包工具——r.js 环境搭建基于nodejs:用于AMD模块化开发中的项目文件压缩打包,不是A ...

  4. Node JS后端项目开发与生产环境总结

    原文地址:Node JS后端项目开发与生产环境总结 Node JS常用后端框架有express.koa.sails.国产框架有个egg js,已经在cnode投入生产了,还有个think js,类似t ...

  5. js模块化开发——require.js学习总结

    1.为什么使用require.js 作为命名空间: 作为命名空间使用: 异步加载js,避免阻塞,提高性能: js通过require加载,不必写很多script 2.require.js的加载 requ ...

  6. js模块化开发——require.js的实战写法1

    关于在Require.js使用一个JS插件的问题 我需要在项目中引用一个js控件,这个控件依赖于a.js,b.js,c.js,.....n.js N多个js以及jquery及jquery-ui,各js ...

  7. 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获

    项目开发中的一些注意事项以及技巧总结   1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...

  8. 微信小程序项目开发实战:用WePY、mpvue、Taro打造高效的小程序》(笔记4)支持React.js语法的Taro框架

    Taro本身实现的情况类似于mpvue,mpvue的未来展望中也包含了支付宝小程序,现在的版本中,也可以使用不同的构建命令来构建出百度小程序的支持,如第10章所示,但是现在Taro先于mpvue实现了 ...

  9. 微服务项目开发学成在线_Vue.js与Webpack

    Vue.js 1.Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.自底向上逐层应用:作为渐进式框架要实现的目标就是方便项目增量开发. 渐进式框架:Progress ...

随机推荐

  1. 0041 Java学习笔记-多线程-线程池、ForkJoinPool、ThreadLocal

    什么是线程池 创建线程,因为涉及到跟操作系统交互,比较耗费资源.如果要创建大量的线程,而每个线程的生存期又很短,这时候就应该使用线程池了,就像数据库的连接池一样,预先开启一定数量的线程,有任务了就将任 ...

  2. x01.TestViewContent: 插件测试

    开发神器 SharpDevelop 的插件系统,很有学习的必要. 1.首先在 github 上下载源代码,确保编译运行无误. 2.在 AddIns/Misc 下添加 SharpDevelop 插件项目 ...

  3. Bootstrap 快速人门案例——前端最火的插件

    今天,我给小白们分享一下比较流行的Bootstrap框架,它在工作中得到许多公司的青睐,因此对于升职和加薪很重要.同时,我们可以快速完成开发任务,减少发开周期,有不对的地方望大家指正. 如果你想走的更 ...

  4. linux 下安装web开发环境

    以下使用 linux centos系统 一.JDK的安装 1.下载jdk-8u111-linux-x64.tar.gz 2.解压该文件,将解压后的文件复制到 /usr/local/jdk1.7 目录下 ...

  5. 重叠div鼠标经过事件

    两个div重叠了,但是下面的div有鼠标移入移出事件,发现当鼠标移入或者移出时事件会执行两次,尝试了在上层div阻止事件,判断div所在位置……,后来发现只要一个css属性即可解决该问题,在上层div ...

  6. Java反射机制

    Java反射机制 一:什么事反射机制 简单地说,就是程序运行时能够通过反射的到类的所有信息,只需要获得类名,方法名,属性名. 二:为什么要用反射:     静态编译:在编译时确定类型,绑定对象,即通过 ...

  7. 分分钟搞定IOS远程消息推送

    一.引言 IOS中消息的推送有两种方式,分别是本地推送和远程推送,本地推送在http://my.oschina.net/u/2340880/blog/405491这篇博客中有详细的介绍,这里主要讨论远 ...

  8. redis分片

    本文是在window环境下测试 什么是分片 当数据量大的时候,把数据分散存入多个数据库中,减少单节点的连接压力,实现海量数据存储 那么当多个请求来取数据时,如何知道数据在哪个redis呢,redis有 ...

  9. 【转】javascript浏览器参数的操作,js获取浏览器参数

    原文地址:http://www.haorooms.com/post/js_url_canshu html5修改浏览器地址:http://www.cnblogs.com/JiangXiaoTian/ar ...

  10. 手机GUI自动化测试工具选择

    (Graphical User Interface,简称 GUI,又称图形用户接口) 我们需要针对自身产品的需求,从中选取一款合适的工具来实现自动化.对于移动客户端GUI的自动化而言,需要保证选取的工 ...