QuickBase:每次在表格中搜索时加载 javascript 文件

QuickBase: Load javascript file every time it searches in tables

好的,所以我有一个启动的 javascript 文件,它注入另一个 javascript 文件,每行创建一个复选框。 js 加载器文件如下所示:

//Run these scripts on all table pages
if (gReqTemplName == "searchresults") {
    console.log(kRecordNamePlural, gReqQID);
    if ((kRecordNamePlural == "Time Cards" && gReqQID == 37) || (kRecordNamePlural == "Milestone Payments" && gReqQID == 11) || (kRecordNamePlural == "Expenses" && gReqQID == 11)) {
        $.getScript('/js/QuickBaseClient.js', function (data) {
            $.getScript(gReqAppDBID + '?a=dbpage&pagename=approve.js');
        });
    };
}

这个特定的 pageID 37 table 有搜索功能。问题是,当我进行搜索时,注入的 javascript 不再起作用。意思是,结果中不再显示每行的复选框。

有什么想法吗?

每当使用搜索框时,报告的内容都会被删除和重写。由于不会重新加载页面来执行此操作,因此 approve.js 在加载页面时所做的任何更改都不会应用于新创建的元素。您可以使用此技术 here 在该报告更新后使您的代码 运行。您要缓存的方法是 QB.Faceting.Instance.tableHomePageView.reportView.updateReport 并且看起来像这样:

QB.Faceting.Instance.tableHomePageView.reportView.updateReport = (function(){
    var cachedFunction = QB.Faceting.Instance.tableHomePageView.reportView.updateReport;
    return function(){
        var result = cachedFunction.apply(this, arguments);
        // Your code that inserts checkboxes
    };
})();

注意:如果 Quickbase 更改其方法名称或搜索框的工作方式,这将停止工作。如果这是一项关键业务功能,您可能需要编写一个自定义页面来处理自己的布局并通过 API 调用对记录进行更改。这样你就不会受到 UI 更新的影响。