項目開發(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.pswp.cn/news/253744.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253744.shtml
英文地址,請注明出處:http://en.pswp.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;主…