Titanium Appcelerator; CommonJS没有方法

时间:2014-08-27 14:37:11

标签: titanium appcelerator commonjs

我对Appcelerator很新,我尝试导入自己的commonJS库。我按照

上的说明操作

http://docs.appcelerator.com/titanium/latest/#!/guide/CommonJS_Modules_in_Titanium

并使用以下代码创建了一个名为" logger.js"的新文件:

exports.info = function(str) {
  Titanium.API.info(new Date()+': '+str);
};

现在我只是尝试使用以下代码来完成此代码:

var logger = require('logger');
logger.info('TEST TEST TEST');

就像在示例中一样。他找到了该文件,但没有认出我的方法,我得到以下异常:

[ERROR] :  TiExceptionHandler: (main) [602,602] ----- Titanium Javascript Runtime Error -----
[ERROR] :  TiExceptionHandler: (main) [0,602] - In alloy/controllers/index.js:100,12
[ERROR] :  TiExceptionHandler: (main) [0,602] - Message: Uncaught TypeError: Object function Controller() {
[ERROR] :  TiExceptionHandler:     function logOutput(str) {
[ERROR] :  TiExceptionHandler:         Titanium.API.info(str);
[ERROR] :  TiExceptionHandler:     }
[ERROR] :  TiExceptionHandler:     require("alloy/controllers/BaseController").apply(this, Array.prototype.slice.call(arguments));
[ERROR] :  TiExceptionHandler:     this.__controllerPath = "login";
[ERROR] :  TiExceptionHandler:     if (arguments[0]) {
[ERROR] :  TiExceptionHandler:         __processArg(arguments[0], "__parentSymbol");
[ERROR] :  TiExceptionHandler:         __processArg(arguments[0], "$model");
[ERROR] :  TiExceptionHandler:         __processArg(arguments[0], "__itemTemplate");
[ERROR] :  TiExceptionHandler:     }
[ERROR] :  TiExceptionHandler:     var $ = this;
[ERROR] :  TiExceptionHandler:     var exports = {};
[ERROR] :  TiExceptionHandler:     exports.destroy = function() {};
[ERROR] :  TiExceptionHandler:     _.extend($, $.__views);
[ERROR] :  TiExceptionHandler:     exports = logOutput;
[ERROR] :  TiExceptionHandler:     _.extend($, exports);
[ERROR] :  TiExceptionHandler: } has no method 'info'
[ERROR] :  TiExceptionHandler: (main) [1,603] - Source:     logger.info("TEST TEST TEST");
[ERROR] :  V8Exception: Exception occurred at alloy/controllers/index.js:100: Uncaught TypeError: Object function Controller() {
[ERROR] :  V8Exception:     function logOutput(str) {
[ERROR] :  V8Exception:         Titanium.API.info(str);
[ERROR] :  V8Exception:     }
[ERROR] :  V8Exception:     require("alloy/controllers/BaseController").apply(this, Array.prototype.slice.call(arguments));
[ERROR] :  V8Exception:     this.__controllerPath = "login";
[ERROR] :  V8Exception:     if (arguments[0]) {
[ERROR] :  V8Exception:         __processArg(arguments[0], "__parentSymbol");
[ERROR] :  V8Exception:         __processArg(arguments[0], "$model");
[ERROR] :  V8Exception:         __processArg(arguments[0], "__itemTemplate");
[ERROR] :  V8Exception:     }
[ERROR] :  V8Exception:     var $ = this;
[ERROR] :  V8Exception:     var exports = {};
[ERROR] :  V8Exception:     exports.destroy = function() {};
[ERROR] :  V8Exception:     _.extend($, $.__views);
[ERROR] :  V8Exception:     exports = logOutput;
[ERROR] :  V8Exception:     _.extend($, exports);
[ERROR] :  V8Exception: } has no method 'info'

我想它很简单,但我不知道我的错。

提前致谢

4 个答案:

答案 0 :(得分:1)

您展示的代码对我有用。您是否在app / lib目录中创建了logger.js?

也许您应该尝试在index.js中注释掉logger.info(...)行,以确保您正在查找正确的问题; - )

您使用的是哪个版本的Titanium Studio? - 以及哪个操作系统?

/约翰

答案 1 :(得分:1)

最好导出主对象和访问信息功能(Titanium Good Practices)。

logger.js

var logger = (function(){

    var self = {};

    self.info = function info(str)
    {
        Ti.API.info(new Date()+': '+str);
    };

    return self;

}());

module.exports = logger;

file.js,您需要记录器

var loggerObject = require('logger.js'); // (both files are at the same Path)
loggerObject.info("TEST TEST");

我希望我的回答可以帮助你;)

答案 2 :(得分:0)

通常我们习惯将这种类型的额外函数文件放在lib目录下,所以你应该在app目录下创建一个文件夹并命名为lib,然后将logger.js文件放在该文件夹下再试一次。

答案 3 :(得分:0)

最后我明白了。问题是我正在使用" Alloy Project"就像#Ale; Alejandro F. Carrera"提到它。我只需使用Alloy.createController();即可使其正常运行。

var logger = Alloy.createController('logger');
logger.info('TEST TEST TEST');

现在可行。

感谢大家指点我正确的方向