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.)