안녕하세요?
지난 프로젝트는 Classic 프로젝트로 진행했고,
이번 프로젝트는 Alloy를 사용하려고 합니다.
그런데 지난 Classic 프로젝트에서 만든 모듈을 Alloy 프로젝트에 추가했더니
아래와 같은 에러가 나오면서 실행이 되지 않습니다.
Object #< Controller> has no method ‘함수이름’
그래서 간단하게 샘플 모듈을 만들었는데, 같은 에러가 계속 발생합니다.
app / controllers / tempModule.js
var tempModule = function(param) { param = param || {}; Ti.API.info('param.message: ' +param.message); };
tempModule.prototype = { func1: function() { Ti.API.info('tempModule.func1() called.'); }, };
tempModule.prototype.constructor = tempModule;
module.exports = tempModule;
app / controllers / index.js
$.index.open(); var tempModuleClass = require('tempModule'); var tm = new tempModuleClass({ message: 'Hello', }); tm.func1();
실행 결과는 아래와 같습니다.
[ERROR] : TiExceptionHandler: (main) [306,306] ----- Titanium Javascript Runtime Error -----
[ERROR] : TiExceptionHandler: (main) [0,306] - In alloy/controllers/index.js:125,8
[ERROR] : TiExceptionHandler: (main) [0,306] - Message: Uncaught TypeError: Object # < Controller> has no method ‘func1’
[ERROR] : TiExceptionHandler: (main) [0,306] - Source: tm.func1();
[ERROR] : V8Exception: Exception occurred at alloy/controllers/index.js:125: Uncaught TypeError: Object #< Controller> has no method ‘func1’
tempModule의 인스턴스 tm은 생성되는데 왜 func1()은 못찾는 것일까요?
모듈은 아래와 같은 형태로도 만들어서 테스트했지만, 결과는 마찬가지였습니다.
var tempModule = function(param) { param = param || {}; Ti.API.info('param.message: ' +param.message); }; tempModule.prototype.func1 = function() { Ti.API.info('tempModule.func1() called.'); }; module.exports = tempModule;
new를 사용하여 tempModule을 생성할 때 "param.message: Hello"가 출력되지 않는 점으로 보면
인스턴스가 생성될 때 constructor가 아예 실행되지 않는 것 같은데, 그 이유를 잘 모르겠습니다.