QuickBase: загружать файл JavaScript каждый раз, когда он ищет в таблицах
Итак, у меня есть файл 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 больше не работает. Это означает, что флажок для строки больше не отображается в результате.
Есть идеи?
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. Таким образом, вы изолированы от обновлений пользовательского интерфейса.