使用SDK 3.2.0
我有一个索引控制器,它定义了一个设置Android菜单的功能。 我想从整个App中嵌套的各种控制器中调用该函数。 代码:
//index.js
exports.setMenus = function(enabled) {
var activity = $.index.getActivity();
activity.onCreateOptionsMenu = function(e){
/...
};
activity.onPrepareOptionsMenu = function(e) {
/...
};
activity.invalidateOptionsMenu();
};
Alloy.Globals.Index = $;
然后,在home controller
内,我试试这个:
function startRefresh() {
//...
Alloy.Globals.Index.setMenus(true);
}
$.on('focus', startRefresh);
收到以下错误消息:
[ERROR] : TiExceptionHandler: (main) [1,40482] - In alloy/controllers/home.js:8,29
[ERROR] : TiExceptionHandler: (main) [0,40482] - Message: Uncaught TypeError: Obje
ct #<Controller> has no method 'setMenus'
[ERROR] : TiExceptionHandler: (main) [0,40482] - Source: Alloy.Globals.Ind
ex.setMenus(true);
我已按照this answer的说明操作。我想使用导出,因为调用setMenus的控制器不是索引的子节点,它们是更深层嵌套的。我的意思是,我试图避免在控制器之间传递参数。
为什么没有导出setMenus?
工作原理:
//index.js
exports.setMenus = function(enabled) {
var activity = $.index.getActivity();
//...
};
Alloy.Globals.setMenus = setMenus;
和
//home.js
function startRefresh() {
//...
Alloy.Globals.setMenus(true);
}
$.on('focus', startRefresh);
答案 0 :(得分:3)
如果你想从各种控制器调用一个函数,那么你可以在alloy.js
中编写该函数
例如:
Alloy.Globals.someGlobalFunction = function(){
alert("Hello");
};
现在你可以在Alloy.Globals.someGlobalFunction();