반응형

RequireJS란

각 js간의 의존성을 관리하고 동적로딩을 지원하는 JS라이브러리이다.

Rhino나 Node와 같은 타 자바스크립트 환경에서 사용할 수 있고 미리 호출할 필요없이 필요할때만 호출하여 성능이 굿!

전역스페이스오염 혹은 scope침범등의 문제가 발생하지않도록 모듈로 지정하여 사용하는게 좋다.

모듈로 지정하면 전역변수랑 지역변수랑 겹칠일이 없다!

 

requireJs를 사용하는 흐름은 

view단에서 requirejs 불름 -> require지시어사용 -> define된 function을 최종적으로 가져옴

 

1. 최종적으로 가져올 js

//Plus.js

define([], function() {
   return {
       add : function(a,b){
           return a+b;
       }
   };
});

 a+b의 기능을 하고싶고 그 기능을 js폴더안에 plus.js라는 파일에 기입하였다.

 

모듈을 선언하는 뜻인 define.

function은 해당 js를 호출하였을때 실행할 코드와 return 될 값 (혹은 개체)를 생성한다.

즉 plus.js를 호출하면 return된 값, 객체를 사용할수있게된다.

 

2. plus.js를 가져올 js 

//index.js
require(["/js/Plus.js"], function(Plus) {
   var a=1, b=2;
   var sum = Plus.add(a,b);
});

모듈을 사용할수있게 해주는 require.

첫번째 인자로는 의존성(쓰고싶은 js가 어디있는지 경로), 두번째 인자로 실행코드함수가 위치한다.

의존성에 들어가있는 경로의 js를 function ( ) 괄호 안에 있는 이름으로 사용하겠다는 의미이다.

 

3.뷰

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>타이틀</title>
</head>
<body>
    <h1> Hello~~ </h1>
    <script type="text/javascript" src="/js/lib/require.js"></script>
    <script type="text/javascript" src="/js/lib/jquery.min.js"></script>
    <script type="text/javascript" src="/js/index.js"></script>
</body>
</html>

뷰에서는 이런식으로 require.js  파일, 경우에따라 jquery파일, 마지막으로 모듈을 사용할 수 있는 js를 추가한다.

 


 

좀더 간결하게 사용하기위해 require되는 부분을 수정한다.

require(["/js/Plus"], function(Plus) {
   var a=1, b=2;
   var sum = Plus.add(a,b);
});

이런식으로 .js를 생략가능하며 

 

아예

require(["Plus"], function(Plus) {
   var a=1, b=2;
   var sum = Plus.add(a,b);
});

이렇게 경로를 줄여 줄 수도 있다.

 

그러기위해서는 별도양식이 적힌 js파일을 만들어야 하는데 

//format.js
require.config({
    baseUrl: "js", // 모듈을 로딩할 기본 패스
    waitSeconds: 15 // 모듈의 로딩 시간을 지정. 시간초과시 Timeout Error 가 throw
});

요렇게 만들어놓고 

 

require.js가 로딩된 다음에 기타 모듈을 로딩하기 전에 기입해둔다.

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <title>타이틀</title>
</head>
<body>
    <h1> Hello~~ </h1>
    <script type="text/javascript" src="/js/lib/require.js"></script>
    <script type="text/javascript" src="/js/lib/jquery.min.js"></script>
    <script type="text/javascript" src="/js/format.js"></script>
    <script type="text/javascript" src="/js/index.js"></script>
</body>
</html>

이런식으로 require.js 와 모듈을 사용하는 index.js 사이에 format.js를 넣어두면 OK!

 


 

mustache 와 함께 사용

 

1. 만들고싶은 경로에서 NEW -> 파일명.mustache 해서 머스타취파일을 만들어주는데 본인이 원하는 html형식을 기입

//boardTemplate.mustache
<table id="boardTable" style="text-align: center; width: 50%">
    <tr>
        <th>번호</th>
        <th>제목</th>
        <th>내용</th>
    </tr>
    {{#boardList}}
    <tr style="border: 1px solid black;" >
            <td>{{boardNumber}}</td>
            <td>{{title}}</td>
            <td>{{contents}}</td>
    </tr>
    {{/boardList}}
</table>
<button id="add">게시글 추가</button>

 

2. js파일을 만들어준다.

//board.js
/**
 * Created by Administrator on 2017-02-20.
 * @module screen/serverAPITest
 */

define(['stache!screen/boardTemplate', 'jquery'], function (boardTemplate) {
    return function () {
        $.get('/board/getList', {}, function (result) {
            $('body').empty().append(boardTemplate(result));
        });

        $('body').on('click', '#add', function () {

            location.href="write.html";
        });

         $('body').on('click', '#boardTable tr', function () {
             var boardSeq = $(this);
                 location.href='detail.html?boardSeq='+ boardSeq.children().eq(0).text();
        });

    }
});

define 다음에 첫번째 인자에는 stache! / 경로/boardTemplate 를 써주고 function 안에 mustache 파일명 (boardTemplate) 을 적어준다. define에서 기존에 적었던 mustache 파일을 가져오는 것이다.

나머지 return function 안에는 jquery 등의 자바스크립트부분을 기술해주면된다.

참고로$.get 요 부분은 기존에 길었던 ajax를 간략하게 서술한 부분!


잠깐! ajax  설명

$.get('경로', 데이터, function (result) {
	//success시 실행되어야할 코드
});

ajax 사용시와 동일하게 

경로를 적어주고 데이터를 넣어주고 result로 결과값이 들어온다.

이때 데이터부분은 바로 변수를 넣으면 에러가 난다.

기존에 ajax 는

데이터가 들어갈 자리에 var data = 3; 이라고 선언한 것을 넣었는데 어째선지 

var data = {    } 의  JSON 형식으로 만들어줘야지 들어갔다.

//안됨
var boardNumber = 4;
$.get('경로', boardNumber, function (result) {
});

//됨
var data ={
   boardNumber = 3
}
$.get('경로', data, function (result) {
});

 

만약 스프링이라면 

@ResponseBody
@RequestMapping(value = "/getDetail")
public String getDetail(@RequestParam String boardNumber){
 블라블라
 }

요렇게 받을텐데,  RequestParam 의 파라메터 변수명과 내가첨부한 데이터 변수명이 맞아야한다.


 

3. html에서 호출

board.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <script src="/lib/require.js"></script>
    <script src="/lib/require-config.js"></script>
    <script>
        require(['screen/board'], function (board) {
            board();
        });
    </script>
</head>
<body>
</body>
</html>

require의 첫번째 인자로는 위에 작성했던 board.js 의 경로를 적어준다. screen/board.js 지만 js는 생략가능하므로 뺐다.

function () 괄호안에도 js파일과 같은 이름으로 설정해주고 board(); 를 호출하였는데

굳이 똑같은 이름으로 호출하나 이유가 있는지는 잘 모르겠다. 나중에 덧붙일것

728x90

'과거 게시글' 카테고리의 다른 글

String 문자열 비교 (.equalsIgnoreCase())  (0) 2019.04.12
Scheduler 라이브러리  (0) 2019.04.11
Mustache  (0) 2019.04.08
Native App? Mobile app? Hybrid App?  (0) 2019.04.08
티스토리 시작!!!  (0) 2019.04.07
반응형

내 실수들을 공유할 공간이 필요했다.

노트에 적을까 생각했지만 빠르게 찾기위해 검색을 하고싶었기에 티스토리를 개설!

취직한지 4일됐는데 아직 모르는게 너무많다

힘내쟛!!

728x90

'과거 게시글' 카테고리의 다른 글

String 문자열 비교 (.equalsIgnoreCase())  (0) 2019.04.12
Scheduler 라이브러리  (0) 2019.04.11
Mustache  (0) 2019.04.08
Native App? Mobile app? Hybrid App?  (0) 2019.04.08
RequireJS  (0) 2019.04.08

+ Recent posts