Alloy에서 테스트로 만든 모듈이 동작하지 않는데 이유가 뭘까요?

안녕하세요?

지난 프로젝트는 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가 아예 실행되지 않는 것 같은데, 그 이유를 잘 모르겠습니다.

classic에서 동작하게 만든 파일은 controller 폴더에 넣으면 안됩니다.
app/lib 에 넣고 사용하세요. require 할 때 lib는 입력하지 않습니다. (lib는 alloy 컴파일시 resource의 각 플랫폼 폴더 root로 복사됨)

controller에 있는 파일은 alloy compile시 변형됩니다. 컴파일 후 resouce에서 변형된 모습 확인 가능합니다.

1개의 좋아요

말씀하신 대로 하니까 잘 되네요,
감사합니다.