SugarCRM 7:在事件上下文之外调用 BaseFilterLayout.applyFilter() 方法

SugarCRM 7: Call BaseFilterLayout.applyFilter() method outside event context

我正在为 Sugar Professional 7 进行定制。2.x 将过滤器从辅助脚本推送到列表视图页面的过滤器函数中。通过在 applyFilter 函数内设置断点并将函数本身导出为全局对象的成员,然后我可以从我的脚本中调用该函数并相应地执行一个临时过滤器。所以我知道我有正确的执行语法,例如:

window.exportedApplyFilter(null, {name:"Mr. Rogers"});

挂断是我无法以任何其他方式获得该 applyFilter 函数,例如

App.view.layout.someMagicObject.applyFilter(...);

有没有办法从另一个脚本访问该函数?

感谢 Sugar 团队,我的问题有了答案。解决办法是通过controller.layout对象树窥探:

App.controller.layout.getComponent('sidebar').getComponent('main-pane')

这允许人们深入到任何 Sidecar UI 组件并访问与其关联的控制器功能。也许不如其他解决方案优雅,但它是可读的。

如果我想更进一步,我可能会编写一个简短的函数来遍历子树并查找具有正确 CID 编号的元素,然后 return 它的完整路径。 CID 编号是渐进的并且深度优先,因此搜索速度会非常快。但是在浏览器开发控制台中手动搜索只花了几分钟。一旦找到,再次访问它就是一系列 getComponent(...) 调用的问题。链中的最终 return 应该是想要的元素(在我的例子中是过滤器控件)并且也应该具有所需的方法。