JavaScript 恢复 table 后格式丢失

JavaScript formatting lost when table is resorted

我将以下代码应用于 SharePoint 列表。我正在用 KPI 替换第二列中的文本。一切都很好,直到在页面上调用另一个脚本(如求助列)。在页面上的任何其他代码被调用后如何重新运行我的脚本?

function updateTableKPIs() {
var prtbl = document.getElementById('{EF4B2750-DD8E-4A81-BFB9-7DC4CD29441A}-{EB96600B-725C-4C9B-B595-BAF51F6CAA21}');
var tbllen = prtbl.rows.length;
    for(var i=1; i < tbllen; i++){
        var level = '';
        var level = prtbl.rows[i].cells[2].innerHTML;
        var pjstatus = '';
        switch(level){
            case 'In Progress':
                pjstatus = 'green';
                break;
            case 'Off Track':
                pjstatus = 'firebrick';
                break;  
            case 'Completed':
                pjstatus = 'steelblue';
                break;                  
            default:
                pjstatus = 'silver';
        }
        prtbl.rows[i].cells[2].innerHTML = '<div style="background-color:' + pjstatus + ';height:20px;width:20px;border-radius:50px;margin:auto;"></div>';

    }
}

window.addEventListener('load', updateTableKPIs);

示例 - 对标题列进行排序前后:

我能够解决这个问题。我 运行 浏览了以下有关 SharePoint 中客户端呈现的文章。 Andrei Markeev 在概述如何使用 CSR 方面做得非常出色。 SharePoint 2013 Client Side Rendering: List Views

下面是我更新的代码。希望其他人也可以使用它,如果他们想在他们的列表中使用 KPI。

function updateTableKPIs() {
var prtbl = document.getElementById('{EF4B2750-DD8E-4A81-BFB9-7DC4CD29441A}-{EB96600B-725C-4C9B-B595-BAF51F6CAA21}');
var tbllen = prtbl.rows.length;
    for(var i=1; i < tbllen; i++){
        var level = '';
        var level = prtbl.rows[i].cells[2].innerHTML;
        var pjstatus = '';
        switch(level){
            case 'In Progress':
                pjstatus = 'green';
                break;
            case 'At Risk':
                pjstatus = 'orange';
                break;              
            case 'Off Track':
                pjstatus = 'firebrick';
                break;  
            case 'Completed':
                pjstatus = 'steelblue';
                break;  
            case 'Backlog':
                pjstatus = 'silver';
                break;                  
            default:
                pjstatus = '';
        }
        prtbl.rows[i].cells[2].innerHTML = '<div style="background-color:' + pjstatus + ';height:20px;width:20px;border-radius:50px;margin:auto;"></div>';

    }
}

SPClientTemplates.TemplateManager.RegisterTemplateOverrides({
  OnPostRender: function(ctx) {
        updateTableKPIs();
  }
});