2013-02-15 76 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