반응형

셋 중에 하나를 이용

$('#Iframe').bind('load',function () {

});
$("#Iframe").load(function () {

  });
$("#Iframe").ready(function(){

 });

 

예시

iframe 로딩이 되는 동안 프로그레스 바를 표시,

로딩 완료후 숨김

//로더 표시
$(".loader").show();

//로더 숨김
$("#reportIframe").load(function () {
    $(".loader").hide();
  });
반응형
반응형

1. spring 프로젝트 생성

https://start.spring.io/

이 링크에서 아래와 같이 선택하여 Spring 프로젝트를 생성

 

  • Maven / Gradle : 필요한 라이브러리를 땡겨오거나 빌드 라이프사이클을 관리한다.
  • Spring Boot 버전 선택 : SNAPSHOT은 만들고 있는 버전이므로 완성된 버전을 선택
  • Dependencies : 라이브러리 선택
  • Thymeleaf : HTML 템플릿 엔진
  • Spring Web : tomcat을 포함함

GENERATE를 누르면 내가 지정한 이름으로 zip파일이 다운로드 된다.

압축 파일을 풀고 진행


2. Intellij 다운 및 열기

https://www.jetbrains.com/ko-kr/idea/download/#section=windows

community 버전으로 설치 

설치 완료 후 Intellij를 열고 Open을 눌러 프로젝트 열기 

build.gradle 선택하여 OK > Open as Project > Trust Project

하면 프로젝트가 열린다

창 밑의 바에서 sync 작업이 열심히 진행중이니 다 될때까지 기다린다.  

기다리지 않고 run을 누르면

여기서 수동으로 configuration을 자꾸 하라고 뜨게되니 완료될 때까지 기다려야함.

 

터미널이 안 보이는 경우 아래 버튼을 이것저것 눌러보자 

 

 

완료 후 src > main > java > 밑의 Application java 파일을 열어보면

코드 옆에 ▶ 가 자동 생성된다.

눌러보면 실행됨.

run configuration은 sync 작업이 완료되면 자동 생성된다

 

 

실행했을 때 

Could not target platform: 'Java SE 11' using tool chain: 'JDK 8 (1.8)'. 

가 뜨는 경우

spring 프로젝트를 java 11 버전으로 만들어놓고

시스템엔 8버전이 있어서 11을 못 찾아서 그렇슴


3. JAVA 11 설치 및 세팅

https://www.oracle.com/kr/java/technologies/javase-jdk11-downloads.html

다운로드 후 . . .

내 PC > 우클릭 속성 >

고급 시스템 설정 > 환경변수 >

편집을 눌러 JAVA_HOME 시스템 변수를 jdk-11로 맞춰주자

 

3-1  Intellij Project Structure 세팅

Ctrl + Alt + Shift + S  혹은 좌측 상단 File > Project Structure

Project SDK 를 11version으로 세팅 

 

 

3-2 Gradle 세팅

build.gradle 파일에 11버전으로 표시되어있는지 확인.

 

 

Ctrl + Alt + S 혹은 좌측 상단 File > Settings 

gradle을 검색하여 gradle 메뉴 클릭

  • Gradle JVM  : JAVA_HOME 11version으로 선택
  • Build and rung using & Rung tests using : Intellij 로 하면 조금 더 실행속도가 빠르다고 한다.

 

 


실행

반응형
반응형

test라는 dom에 click이벤트가 걸린 상황.

 

이 경우에 click 이벤트가 중복으로 걸려서 

횟수가 x2 되어 실행된다.

또 누를 경우 x2 되어 4번.. 8번...

중복을 막기위해 .off를 추가해주자 

function func1(){

  $(document).off("click", "#test").on("click", "#test", function () {
    func1();
  });
    
}
반응형
반응형

겨울에 소리없이 쌓이는 눈처럼

몽글몽글하고 별 탈없는 미적지근한 연애소설.

 

소설 속에 여러 나이대의 등장인물이 등장하는데,

어린 아이나 10대 학생의 말투가 전혀 그 나이대의 것이 아니어서 괴리감이 느껴졌다.

현실반영이 너무 안 된 느낌이라고 할 지, 시대에 뒤처진 느낌이라고 할 지...

 

얼마 전에 본 짤 중 웹툰에서 10대들의 말투를 표현한다고 표현하여 쓴 대사가 있었는데

전혀 시대에 맞지 않는 대사라서 웃음거리가 된 것이 있었다.

그 짤이 잠시 스쳐갔었다..

 

아무튼 내 취향은 아니지만

각종 인문 서적들과.. 사회 이슈를 다룬 이야기들을 읽다가...

이걸 읽으니 

마음이 평화로운 느낌이다.

 

 


눈동자 뒤에 그녀가 살기 시작했다. 눈을 감아도 소용이 없다. 계속 보이니까. 

 

 

 

"날씨 좋을 때 보자 … 난 그런 빈말 싫더라. 어떤 식으로 말해도, 절실하지 않은 관계라는 데는 변함이 없어. 진짜로 보고 싶어봐. 눈보라 치고 강둑이 범람하고 전쟁이 나도, 만나겠다고 목숨 걸고 달려가는게 인간들이지."

 

 

 

요즘의 나는 사랑을 하면서 무엇인가를 얻었고, 또 무엇인가를 잃었다. 잃었음을 알고 있는데, 새로 얻은 게 좋아서 무엇을 잃었는지 알고 싶지도 않다. 
반응형

'' 카테고리의 다른 글

체공녀 강주룡 - 박서련  (0) 2021.07.13
천 개의 파랑 - 천선란  (0) 2021.07.06
김한민 - 아무튼, 비건  (0) 2021.04.28
페인트 이희영  (0) 2021.03.10
그믐, 또는 당신이 세계를 기억 하는 방식 - 장강명  (0) 2020.11.23
반응형
$("#table").DataTable().destroy(); //이전에 만든 것 없애고 다시 그리기 위함.
const table = $("#table").DataTable({
          responsive: false,  //반응형 설정
          pageLength: 10,     //페이지 당 글 개수 설정
          autoWidth: false,
          destroy: true,
          processing: true,
          serverSide: false,
          searching: false,    //검색란 표시 설정
          ordering: true,      //글 순서 설정
          paging: true,        //페이징 표시 설정
          dom: "Blfrtip",      //버튼 dom 설정 l을 추가하면 pagelength 드롭다운 표시
          buttons: [
            {
              extend: "excel",
              text: "엑셀 다운로드",
              filename: function () {
                if ($("#file1").val() === "a1") {
                  return "_"+$("#file1").val();
                } else {
                  return "file2";
                }
              },

              customize: function (xlsx) {
              //엑셀 셀 커스텀
                var sheet = xlsx.xl.worksheets["sheet1.xml"];
                $("c[r=B2] t", sheet).text("custom text1");
                $("c[r=C2] t", sheet).text("custom text2");
 
              },
            },
          ],
          language: {
            emptyTable: "데이터가 없습니다.",
            lengthMenu: "페이지당 _MENU_ 개씩 보기",
            info: "현재 _START_ - _END_ / _TOTAL_건",
            infoEmpty: "데이터 없음",
            infoFiltered: "( _MAX_건의 데이터에서 필터링됨 )",
            search: "",
            zeroRecords: "일치하는 데이터가 없습니다.",
            loadingRecords: "로딩중...",
            processing: "잠시만 기다려 주세요.",
            paginate: {
              next: "다음",
              previous: "이전",
            },
          },
          data: chartDataList,
          columns: [
            { data: "data1" },
            { data: "data2" },
            { data: "data3" },
            { data: "data4" },
          ],
          columnDefs: [
            {//0번컬럼 설정
              targets: 0,
              orderable : false,
              render: function (data) {
                if ($("#searchType").val() === "day") {
                  return data + "시";
                } else {
                  return data;
                }
              },
            },
            {//1번,2번컬럼 설정
              targets: [1,2],
              visible: false,
              orderable : false,
              render: function (data) {
              	return data;      
              },
            },
            {//모든 컬럼 설정
              targets: "_all",
              render: function (data, type, full, meta) {
              	console.log(data); // 데이터중 해당 열, 행에 들어갈 data
                console.log(type); 
                console.log(full); // 데이터중 해당 행에 들어갈 full data
                console.log(meta); // 해당 셀의 row, col 번호
              },
            },
          ],
        });
        
//데이터 테이블 필터링하여 보여주기 설정
//필터링 할 컬럼 번호로 search 이용
table.column(0).search("value").draw();
반응형
반응형

cannot read property 'substring' of null

cannot read property 'substring' of undefined

 

왜 null이라고 나오는지 모르겠네..

substring 하려는 변수를 ""를 붙여서 string 타입으로 바꿔버리자..

 

let aaa = ""+mydata;

 

반응형
반응형

AJAX에서 return 받은 결과값을

여러 함수에서 이용하려다가

자꾸 값이 똑같아져서...

AJAX 동기화 문제인가.. 함수 순서때문인가.. 어리둥절하다가 알아냄...^.ㅠ


내 문제는 이거였다.. 

array2 값을 c와 d에 따로 담아서 

c의 값을 바꿨는데 d값도 덩달아 바뀐거... 

  let array2=[{"key":"메뉴","value":"짜장"},{"key":"사이드","value":"탕수육"}];
  let c = array2;
  let d = array2;
  c[0].value="짬뽕";
  console.log(d[0].value); //짬뽕 출력

 

심지어 아래와 같은 방식으로 복사를 했는데도 자꾸 값이 바뀌는 것이었다...

for(let i in array2){
    c[i] = array[i];
    d[i] = array[i];
  }

 

 

같은 예라고 할 수 있겠다. 이것이 바로 참조값(주소값)이 복사가 되는 얕은 복사.

  let array=["1","2","3"];
  let a = array;
  let b = array;
  a[0]="text";
  console.log(b[0]); //"text" 출력

a <- array 주소값 

b <- array 주소값 

이렇게 담기면서

a[0]을 변경 -> array[0] 변경 -> b[0] 변경

이렇게 되었던것..


깊은복사 방법

 

1. 반복문으로 때려넣기

반복문으로 값을 하나하나 때려넣어주면 참조값이 아닌 값이 들어가기 때문에

더이상 영향을 받지 않는다. 

 let array3 = ["a","b","c"];
  let e=[];
  let f=[];
  
  for(let i in array3){
    e[i] = array3[i];
    f[i] = array3[i];
  }
  e[0]="eee";
  console.log(f[0]); //"a" 출력

JSON 구조의 배열일 경우 {키:값}을 하나하나 때려넣어 줘야한다 

  let array4=[{"key":"동물","value":"갱쥐"},{"key":"동물","value":"보노보노"}];
  let x = [];
  let y = [];
  for(let i in array4){
    x.push({"key":array4[i].key,"value":array4[i].value});
    y.push({"key":array4[i].key,"value":array4[i].value});
  }

  x[0].value="포로리";
  console.log(y[0].value); //"갱쥐" 출력

 

2. slice

slice 를 이용해도 깊은 복사가 된다. 

slice 는 start 부터 end 까지 대상 배열에서 꺼내와 새로운 배열을 만들어 값을 집어 넣는다. 

start 와 end 가 주어지지 않으면 전체 배열을 복사한다.

  let array5 = ["aa","bb","cc"];
  let v = array5.slice();
  let w = array5.slice();

  v[0]="ddd";
  console.log(w[0]);

 

3. Object.assign

Object.assing()은 뒤의 인자를 앞에 인자에 합쳐 넣는다. 

var o1 = {name:'kim'};  
var o2 = Object.assign({},o1); 
o2.name='kim2'; 

console.log(o1,o2); //{name: "kim"} {name: "kim2"}
반응형
반응형

맛있당~~~

현대 장칼국수만큼 꾸덕하거나 칼칼하진 않지만

넘 맛있당~~

여긴 약간 고추장 푼 매운탕 느낌.

근데 맛있당~~~~~~~

수육도 맛있당~~~~

고기가 야들야들하니 맛있당~~ 소짜 12000원~~

그렇다고 한당~~~

 

국회의사당역 5번출구로 나오면

왼쪽에 있는 스타벅스 지하1층에 있다. 

 

반응형
반응형

반복문에 ajax를 넣었는데 ajax가 한 번만 실행되는 것 같다..?

ajax는 비동기라서

for문은 ajax의 호출완료따위 기다려주지 않는다...

async:false를 추가해야함

for (var i = 0; i < AdminArray.length; i++) {
        $.ajax({
          url: "https://testapi/ok",
          type: "PUT",
          data: paramList,
          async: false,
          success: function (response) {
            if (response.result === 1) {
              result *= 1;
            } else {
              result *= 0;
            }
          },
        });
      }
반응형
반응형

1. 차트 생성 및 데이터 바인딩

var chart = am4core.create("chartdiv", am4charts.PieChart);

//3D chart로 만들 경우
// am4core.useTheme(am4themes_animated);
//let pieChart = am4core.create("pieChartDiv", am4charts.PieChart3D);

// 데이터를 직접 명시할경우
chart.data = [{
  "country": "Lithuania",
  "litres": 501.9
}, {
  "country": "Czechia",
  "litres": 301.9
}, {
  "country": "Ireland",
  "litres": 201.1
}, {
  "country": "Germany",
  "litres": 165.8
}, {
  "country": "Australia",
  "litres": 139.9
}, {
  "country": "Austria",
  "litres": 128.3
}, {
  "country": "UK",
  "litres": 99
}, {
  "country": "Belgium",
  "litres": 60
}, {
  "country": "The Netherlands",
  "litres": 50
}];

//data object를 넣을경우
//pieChart.data = chartData;

2. 차트 범례 설정

//범례 생성
chart.legend = new am4charts.Legend();
//범례 높이사이즈
chart.legend.maxHeight = 50;
//범례 스크롤 여부
chart.legend.scrollable = true;
//범례 이름 설정
chart.legend.labels.template.text="국가 : {country}";


3. 차트 시리즈 설정

//차트 시리즈 생성
var pieSeries = chart.series.push(new am4charts.PieSeries());
//바인딩할 데이터 이름
pieSeries.dataFields.value = "litres";
//데이터 분류(category) 이름
pieSeries.dataFields.category = "country";
//파이 부분별 구분선 색
pieSeries.slices.template.stroke = am4core.color("#fff");
//파이에 마우스오버 시 표시할 툴팁 설정
pieSeries.slices.template.tooltipText="툴팁";
//파이 부분별 라벨 이름
pieSeries.labels.template.text = "{country}국가";


//저 수염처렁 주렁주렁 달린 라벨선을 삭제할 때 
pieSeries.ticks.template.disabled = true;


//라벨 자체를 싹 다 없애고 싶을 때
pieSeries.labels.template.disabled = true;


//가운데를 뚫고 싶다면
chart.innerRadius = am4core.percent(40);

반응형

+ Recent posts