Sencha Touch 2:仅在生产版本中无法从java类调用控制器内的函数

时间:2013-02-15 19:29:31

标签: extjs sencha-touch sencha-touch-2

背景: 我正在Android设备的webview中加载一个sencha移动网站,并从java类访问在sencha控制器内声明的函数 如下。

webView.loadUrl("javascript:getMeNumbers();");

此功能在我的控制器

中声明
getMeNumbers : function(value) {
  console.log('Controller: Function called >> getMeNumbers');
}

问题:当我在开发模式下运行此应用程序时,我能够从java类调用此控制器函数。 但是只要我创建生成版本并尝试从java类调用此控制器函数,它就会开始给我错误:

'ReferenceError: Can't find variable: getMeNumbers at undefined:1''` in the console.

任何想法为什么它不能在生产版本中工作,但仅适用于开发版本?任何想法或指针都会有很大帮助。

由于

2 个答案:

答案 0 :(得分:1)

当构建js / css的应用程序被压缩时,它会重命名函数,变量名称以缩短它们。通常,删除压缩器认为无用的功能。通常这样做是为了减小文件的大小。

所以在你的情况下,压缩器可能已经将函数重命名为其他东西,或者如果没有从任何js文件调用它,则最不可能删除。

您可以做的是在压缩js文件后识别函数名称。尝试搜索功能体。

答案 1 :(得分:1)

控制器功能不是全局功能,因此您无法直接调用它们。

假设您的应用程序名称是APP,而您的控制器是" MainController",您可以试试这个:

webView.loadUrl("javascript:APP.app.getControllerInstances()['APP.controller.MainController'].getMeNumbers()");

另一种方法是使用路由:在控制器中,添加路由config:

routes:{
  'getmenumbers': 'getMeNumbers'
}

然后:

webView.loadUrl("#getmenumbers");