【发布时间】:2014-04-29 12:04:49
【问题描述】:
使用 SDK 3.2.0
我有一个索引控制器,它定义了一个设置 Android 菜单的函数。 我想从整个应用程序中嵌套加载的各种控制器调用该函数。 代码:
//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);
【问题讨论】:
-
将exports.setMenus 更改为$.setMenus。这应该可以供将来参考,但 Swanand 的回答是更好的做法。
标签: titanium controllers titanium-alloy