2013-02-15 75 views
1

BackGround: 我在Android设备的webview中加载sencha移动网站并访问从sencha控制器中声明的函数java类 如下。Sencha Touch 2:只能在生产版本中才能从java类调用控制器内部的函数

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. 

为什么不生产版本工作,但只有在工作的任何想法开发版本?任何想法或指针都会有很大帮助。

感谢

回答

1

控制器功能不是全局功能,所以你不能直接调用它们。

假设你的应用程序名称为APP,和你的控制器是“MainController”,你可以试试这个:

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

的另一种方法是使用路线:在你的控制器中添加一个路由配置:

routes:{ 
    'getmenumbers': 'getMeNumbers' 
} 

然后:

webView.loadUrl("#getmenumbers"); 
+0

非常感谢您的解释。我正在与全球功能合作,但在生产版本开发之后,他们在某种程度上失去了全球环境。这种方法真的有帮助,现在我能够理解如何从webview调用一个函数,即使它不是一个全局函数。再次感谢。 – Gendaful 2013-02-18 01:37:45

1

当应用程序是构建一个是JS/CSS被压缩,它重命名功能,变量名称缩短的。它通常会去除压缩器认为无用的功能。这通常是为了减小文件的大小。

因此,在你的情况下,压缩机可能已经重新命名了其他功能,或者如果它没有被任何js文件调用,可能会被删除。

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

+0

感谢您的响应,phazor。我已经在压缩的app.js中搜索了函数名,并且我能够在文件中完整地找到函数。任何其他线索? – Gendaful 2013-02-15 20:38:51

+0

它是一个全局函数,并声明为外部控制器Ext.define。你认为这可能是原因吗? – Gendaful 2013-02-15 20:46:39

+0

这两个函数名称是否与您刚刚构建的js中调用的函数名称匹配? – SachinGutte 2013-02-15 20:48:49