0

好的,所以我有一个启动的 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 表具有搜索功能。问题是,当我进行搜索时,注入的 javascript 不再起作用。意思是,每行的复选框不再显示在结果中。

有任何想法吗?

4

1 回答 1

1

每当使用搜索框时,报告的内容都会被删除和重写。由于没有重新加载页面来执行此操作,approve.js因此在加载页面时所做的任何更改都不会应用于新创建的元素。您可以在此处使用此技术使您的代码在该报告更新后运行。您要缓存的方法是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 更新的影响。

于 2016-04-20T22:56:14.260 回答