kintone의 레코드 상세에 설치한 테이블행에, 조건에 따라 배경색을 붙여 준다
kintone의 테이블을 JavaScript로 DOM 조작하는데 필요한 기본이 들어 있습니다.
소개 완성된 이미지
앱 설정 개요
처리 개요
앱 상세 화면을 열 때 테이블 셀에 설정한 시간대 구분의 「오전, 오후, 1시간 전」에 따라 테이블 행의 배경색을 설정합니다.
처리 흐름
소스 코드
더 좋은 방법, 심플한 방법은 있을까 생각하므로 꼭 의견을 주시면 도움이됩니다.
(※setInterval을 사용한 방식으로 변경해 보았습니다.)
JavaScript 파일
jQuery.noConflict();
(function($) {
"use strict";
var events = ["app.record.detail.show"];
var fieldCodeSubTable = "日報_当日";
kintone.events.on(events, function(event) {
var record = event.record;
var recordId = kintone.app.record.getId();
var subTable = record[fieldCodeSubTable].value;
console.log(subTable);
console.log(subTable.length);
if (subTable.length === 0) { return event } // subtable record nothing
// テーブルフィールドを取得
var el = kintone.app.record.getFieldElement(fieldCodeSubTable);
// テーブルの行数を取得します
function asyncProcess(val, len) {
console.log(val);
console.log(len);
return new Promise((resolve, reject) => {
var timer = setInterval(() => {
if (val.length - 1 === len) {
console.log(val.length);
clearInterval(timer);
resolve(val.length);
} else {
console.log(val.length);
}
}, 100);
});
}
// テーブルの行内のセルの内容に合わせて、tr要素にクラス属性をセットします
asyncProcess(el.rows, subTable.length).then(
response => {
for (var i=1, len=response; i<len; i+=1) {
var timeTable = el.rows[i].cells[0].textContent;
switch (timeTable) {
case '午前' :
el.rows[i].classList.add("am");
break;
case '午後' :
el.rows[i].classList.add("pm");
break;
case '1時間前' :
el.rows[i].classList.add("last");
break;
default :
console.log(timeTable);
}
}
return event;
},
error => {
console.log(error);
return event;
}
);
});
})(jQuery);
CSS 파일
.am {
background-color:#7AE1FF;
}
.pm {
background-color:#7BE5B8;
}
.last {
background-color:#E5D351;
}
요약
kintone의 테이블을 조작할 때에 주의하고 싶은 점은, 테이블의 묘화 타이밍입니다.
화면의 끝에서 그려진 것처럼, 테이블 행 수를 얻고 루프에서 각 행의 DOM을 조작하는 경우 setTimeout을 사용하여 테이블 그리기를 기다려야합니다.
테이블의 렌더링 대기를 setTimeout에서 setInterval로 변경했습니다. rex0220, 조언 해 주셔서 감사합니다.
덧붙여 비슷한 내용의 투고가 cybozu developer network 에 있었으므로, 링크해 둡니다.
jQuery.noConflict();
(function($) {
"use strict";
var events = ["app.record.detail.show"];
var fieldCodeSubTable = "日報_当日";
kintone.events.on(events, function(event) {
var record = event.record;
var recordId = kintone.app.record.getId();
var subTable = record[fieldCodeSubTable].value;
console.log(subTable);
console.log(subTable.length);
if (subTable.length === 0) { return event } // subtable record nothing
// テーブルフィールドを取得
var el = kintone.app.record.getFieldElement(fieldCodeSubTable);
// テーブルの行数を取得します
function asyncProcess(val, len) {
console.log(val);
console.log(len);
return new Promise((resolve, reject) => {
var timer = setInterval(() => {
if (val.length - 1 === len) {
console.log(val.length);
clearInterval(timer);
resolve(val.length);
} else {
console.log(val.length);
}
}, 100);
});
}
// テーブルの行内のセルの内容に合わせて、tr要素にクラス属性をセットします
asyncProcess(el.rows, subTable.length).then(
response => {
for (var i=1, len=response; i<len; i+=1) {
var timeTable = el.rows[i].cells[0].textContent;
switch (timeTable) {
case '午前' :
el.rows[i].classList.add("am");
break;
case '午後' :
el.rows[i].classList.add("pm");
break;
case '1時間前' :
el.rows[i].classList.add("last");
break;
default :
console.log(timeTable);
}
}
return event;
},
error => {
console.log(error);
return event;
}
);
});
})(jQuery);
.am {
background-color:#7AE1FF;
}
.pm {
background-color:#7BE5B8;
}
.last {
background-color:#E5D351;
}
kintone의 테이블을 조작할 때에 주의하고 싶은 점은, 테이블의 묘화 타이밍입니다.
화면의 끝에서 그려진 것처럼, 테이블 행 수를 얻고 루프에서 각 행의 DOM을 조작하는 경우 setTimeout을 사용하여 테이블 그리기를 기다려야합니다.
테이블의 렌더링 대기를 setTimeout에서 setInterval로 변경했습니다. rex0220, 조언 해 주셔서 감사합니다.
덧붙여 비슷한 내용의 투고가 cybozu developer network 에 있었으므로, 링크해 둡니다.
Reference
이 문제에 관하여(kintone의 레코드 상세에 설치한 테이블행에, 조건에 따라 배경색을 붙여 준다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sy250f/items/390ace1dbb1111ee8f14텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)