如果术语不正确,请道歉,开发不是我的第一语言:)
我正在尝试向名为Traccar(一个基于web的跟踪平台)的extjs web应用程序添加功能。
对于熟悉该应用程序的任何人,我想做的是在设备部分添加一个“快速报告”按钮,以便您可以单击一个设备,单击该按钮,它将展开报告部分,并预先选择报告类型为trips,设备为所选设备,然后单击show。
从技术Angular 来看,我已经做到了一些。我认为我需要关注两个视图控制器——“DevicesController.js”(https://github.com/traccar/traccar-web/blob/9e1c0b44189136ec6abf05720c698027a689fa08/web/app/view/edit/DevicesController.js)和“ReportsController.js”
我已经解决了如何展开屏幕底部的报告部分(这相当简单):
onQuickReportClick: function() {
Ext.getCmp('reportViewPanel').expand(true);
},
我一直试图打电话给报表管理员与之交互,但我似乎无法了解如何做(如果你能做到的话)。我一直在尝试这样的事情-
var reportController = Traccar.app.getController("Traccar.view.ReportController");
reportController.test();
但是,我遇到了这样的错误
``` Uncaught TypeError: controller.doInit is not a function
``` at constructor.getController (ext-all-debug.js:95199:28)
``` at constructor.onQuickReportClick (DevicesController.js:109:38)
``` at Object.callback (ext-all-debug.js:8705:32)
``` at constructor.fireHandler (ext-all-debug.js:144259:17)
``` at constructor.onClick (ext-all-debug.js:144241:16)
``` at constructor.fire (ext-all-debug.js:20731:42)
``` at constructor.fire (ext-all-debug.js:34336:27)
``` at constructor.publish (ext-all-debug.js:34296:28)
``` at constructor.publishDelegatedDomEvent (ext-all-debug.js:34318:14)
``` at constructor.doDelegatedEvent (ext-all-debug.js:34361:16)
目前的测试方法非常简单,只是为了证明我已经做到了-
test: function () {
showToast("test - succsfully in report controller", "test");
},
如有任何建议/指导/建议,我们将不胜感激
2条答案
按热度按时间syqv5f0l1#
建议
从另一个控制器调用控制器是NoGo。
控制器是一个viewController,在创建视图以响应该视图中的用户输入时创建。最糟糕的情况:另一个视图不存在,因此尚未创建viewController。
如果你真的需要
你想关注Peters的评论并运行:
好多了
利用事件或设置自己的Eventbus
设置事件总线
应用程序启动呼叫后
有了它,您可以在一个viewController中触发事件:
在接收viewController中,您之前设置了一个侦听器
btqmn9zl2#
您可以使用事件。实际上,您不需要为此设置总线。你可以这样称呼:
然后在另一个地方订阅:
事实上,Traccar应用程序中经常使用事件。您可以只搜索现有的用法。