JsDataBind 1.0
- 자바스크립트를 이용한 데이터 교체 라이브러리
- 문자열을 'Json'으로 받은 데이터로 교체기능
- 사용자 정의 패턴 정의 가능
라이브러리 테스트 : https://dang-gun.github.io/DG_JavaScript_Utility/DG_JsDataBind/test/index.html
프로그램 소스 : (깃 허브) dang-gun/DG_JavaScript_Utility/DG_JsDataBind/
Author : Dang-Gun Roleeyas ( http://blog.danggun.net/ )
Create date : 2019.09.20
License : MIT( https://opensource.org/licenses/MIT )
사용기술 : javascript
자바스크립트 웹 프레임웍들을 보면 데이터 바인딩 기능이 있습니다.
Html이나 문서에 특정구분자를 찾아서 데이터로 교체해주는 기능이죠.
Html에 데이터를 표현하려면 Html조각이 있어야 하는데 이 조각을 정석대로 만들면 손이 너무 많이 갑니다.
이걸 교체(Replace)하는 방식으로 처리하면 한방에 데이터를 넣을 수 있죠.
이 교체하는 기능을 구현하는 것이 이 라이브러리입니다.
바인드용 문자열을 수정하여 같은 문자열을 쓰는 아이템을 한번에 관리 할 수 있습니다.
- 지정한 패턴을 찾아 데이터로 교체
- 사용자 지정 패턴 추가
- 패턴 그룹화
- 사용할 그룹 선택 지정 가능
'JsDataBind' 개체를 생성해 둡니다.
예>
1 | var insDB = new DG_JsDataBind(); | cs |
원본 문서의 기본 패턴은 '{{'로 시작해서 '}}'로 끝나야합니다.
패턴의 내용에 패턴의 이름을 넣어 줍니다.
예>
1 | var sOriData = "내 나이는 {{age}}입니다."; | cs |
변경할 데이터는 json형식으로 제공되야 합니다.
'{[패턴 이름] : [교체할 데이터]' 형식으로 json을 구성해야 합니다.
예>
1 2 3 4 | { "name": "John" ,"age": "50" } | cs |
기본 패턴의 이름은 "defult" 입니다.
생성한 개체에서 'DataBind([원본 문자열], [사용할 패턴 배열], [바인딩할 데이터], [매치방식])'함수를 호출하여 데이터를 바인딩 합니다.
예>
1 2 3 | var sReturn = insDB.DataBind(sOriData, ["defult"], jsonValue, DG_JsDataBind_MatchType.Select); //단축하여 사용 var sReturn2 = insDB.DataBind_All(sOriData, jsonValue); | cs |
기본 패턴을 사용하여 데이터를 바인딩 해봅시다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /** 셈플1 */ function Test_Sample01() { var insDB = new DG_JsDataBind(); var sOriData = "내 나이는 {{age}}입니다."; var jsonValue = { "name": "John" , "age": "50" }; var sReturn = insDB.DataBind( sOriData , ["defult"] , jsonValue , DG_JsDataBind_MatchType.Select ); domTxtResult.value = sReturn.ResultString; } | cs |
실행을 하면 '{{age}}'가 '50'으로 교체되는 것을 확인 할 수 있습니다.
직접 원하는 패턴을 만들어 사용할 수 있습니다.
'MatchPatternListAdd([리스트매치 구분용 타입], [매치 패턴에 사용할 json])'함수를 이용하여 원하는 패턴을 만들어 추가할 수 있습니다.
여기서는 ':name1', ':name2'라는 패턴을 추가하고 출력하는 방법을 알아보겠습니다.
일단 원본 문자열을 아래와 같이 선언합니다.
1 2 | //원본 데이터 var sOriData = "내 이름은 {{name:name1}}{{name:name2}} 나이는 {{age}}입니다."; | cs |
이 원본을 사용하면 "이름(이름)" 이런 형식으로 결과물이 나올 것입니다,
'json' 오브젝트를 선언하고 다음과 같이 선언합니다,
1 | var jsonAdd = { ":name1": function (sOriData, sMatchString, sValue) { return insDB.ReplaceAll(sOriData, sMatchString, sValue); }}; | cs |
':name1' 은 패턴 비교에 사용할 문자열입니다.
이렇게 되면 "{{[데이터 이름]:name1}}" 이 패턴을 찾게 됩니다.
일치하는 패턴을 찾으면 설정된 함수가 동작합니다.
패턴에 사용할 함수의 형식은 다음과 같습니다.
1 2 3 4 5 6 7 8 9 | /** * @param {string} sOriData 원본 문자열 * @param {string} sMatchString 매치에 사용된 문자열 * @param {string} sValue 바꿀 문자열 */ function (sOriData, sMatchString, sValue) { return [리턴 문자열]; } | cs |
패턴에 사용할 함수는 마음대로 구성이 가능하지만 리턴은 문자열로 넘겨야 합니다.
문자열에서 패턴을 찾아 전체 변경하려면 생성한 개체에서 'ReplaceAll([원본], [찾을 문자열], [바꿀 문자열])'함수를 호출하여 사용할 수 있습니다.
예>
1 | insDB.ReplaceAll(sOriData, sMatchString, sValue + ":AddTest1"); | cs |
이것을 'ReplaceAll'함수는 필수 사항이 아닙니다.
자체적으로 지원하는 함수를 구현하고 있다면 그것을 사용해도 됩니다.
같은 방법으로 ':name2'도 만들어 줍니다.
1 2 3 4 5 | //사용자 정의 패턴 추가 var jsonAdd = { ":name1": function (sOriData, sMatchString, sValue) { return insDB.ReplaceAll(sOriData, sMatchString, sValue); } , ":name2": function (sOriData, sMatchString, sValue) { return insDB.ReplaceAll(sOriData, sMatchString, "(" + sValue + ")"); } }; | cs |
'{"[패턴 문자열]", [패턴에 사용할 함수]}' 형식으로 만들어야 합니다.
위에서 만든 패턴을 'MatchPatternListAdd([리스트매치 구분용 타입], [매치 패턴에 사용할 json])'함수에 전달합니다.
1 2 | //패턴 추가 insDB.MatchPatternListAdd("NameAdd", jsonAdd); | cs |
이렇게 되면 'NameAdd'패턴이 추가됩니다.
'DataBind'를 사용할때 이름을 'NameAdd'로 사용하면 결과가 나옵니다.
1 2 | //데이터 바인딩 시도 var sReturn = insDB.DataBind(sOriData, ["NameAdd"], jsonValue, DG_JsDataBind_MatchType.Select).ResultString; | cs |
전체 코드는 아래와 같습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | /** 셈플2 */ function Test_Sample02() { //개체 생성 var insDB = new DG_JsDataBind(); //원본 데이터 var sOriData = "내 이름은 {{name:name1}}{{name:name2}} 나이는 {{age}}입니다."; //사용자 정의 패턴 추가 var jsonAdd = { ":name1": function (sOriData, sMatchString, sValue) { return insDB.ReplaceAll(sOriData, sMatchString, sValue); } , ":name2": function (sOriData, sMatchString, sValue) { return insDB.ReplaceAll(sOriData, sMatchString, "(" + sValue + ")"); } }; //패턴 추가 insDB.MatchPatternListAdd("NameAdd", jsonAdd); //바인딩에 사용할 데이터 var jsonValue = { "name": "John" , "age": "50" }; //데이터 바인딩 시도 var sReturn = insDB.DataBind( sOriData , ["NameAdd"] , jsonValue , DG_JsDataBind_MatchType.Select ); //결과 출력 domTxtResult.value = sReturn.ResultString; } | cs |
'defult'패턴과 'NameAdd'패턴을 동시에 사용해 봅시다.
'DataBind'함수를 호출할때 패턴 이름 배열에 사용할 패턴이름을 나열하면됩니다.
나열된 순서대로 패턴이 처리되게 됩니다.
1 2 | //데이터 바인딩 시도 var sReturn = insDB.DataBind(sOriData, ["defult","NameAdd"], jsonValue, DG_JsDataBind_MatchType.Select).ResultString; | cs |
'DG_JsDataBind_MatchType'에 미리 정의 되어있습니다.
Select : 1
- 지정된 모든 매치패턴 리스트 검사
- 매치된 내용이 있어도 전체 검사를 합니다.
- 데이터에 바인딩용 문자열이 1개만있어도 모두 검사합니다.
First : 2,
- 처음 1개가 매치되면 검사를 끝냄
- 매치 순서는 지정된 리스트의 순서를 따릅니다.
- 맨처음 일치하는 1개만 바꾸고 검사를 끝냅니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /** 셈플4 */ function Test_Sample04() { //개체 생성 var insDB = new DG_JsDataBind(); //원본 데이터 var sOriData = "내 이름은 {{name:name1}}{{name:name2}} 나이는 {{age}}입니다."; //사용자 정의 패턴 추가 var jsonAdd = { ":name1": function (sOriData, sMatchString, sValue) { return insDB.ReplaceAll(sOriData, sMatchString, sValue); } , ":name2": function (sOriData, sMatchString, sValue) { return insDB.ReplaceAll(sOriData, sMatchString, "(" + sValue + ")"); } }; //패턴 추가 insDB.MatchPatternListAdd("NameAdd", jsonAdd); //바인딩에 사용할 데이터 var jsonValue = { "name": "John" , "age": "50" }; //데이터 바인딩 시도 var sReturn = insDB.DataBind( sOriData , ["defult", "NameAdd"] , jsonValue , DG_JsDataBind_MatchType.First ); //결과 출력 domTxtResult.value = sReturn.ResultString.ResultString; } | cs |
- 단축하여 호출할 수 있도록 'DataBind_All' 함수 추가
- 매치방법 기능 추가
- 구현 완료