在Appcelerator Titanium中定义JavaScript类

时间:2011-11-07 17:29:38

标签: javascript appcelerator-mobile

我正在尝试使用Appcelerator Titanium来构建移动应用。这个应用程序很大,为了使其易于管理,我想使用JavaScript类。目前,我有一个JavaScript类,定义如下:

function Item()
{
  this.ID = 0;

  this.initialize = function(id) {
    this.ID = 1;
  }

  this.Submit = function(submitHandle) {
    submitHandle();
  };
}

然后我使用以下方法调用此类:

alert("building Item");
var i = new Item();
alert("initializing Item");
i.initialize(1);
alert("submitting");
i.Submit(itemSubmitted);

function itemSubmitted() {
  alert("tada!");
}

出现显示“buidling item”的警告消息。但是,“初始化项目”从未显示过。此外,我的项目从未提交。我没有收到错误。我做错了什么?

2 个答案:

答案 0 :(得分:1)

我已经使用Titanium Mobile SDK 1.7.5将此代码放在一个空白的app.js文件中,并且它在iPhone模拟器中按预期工作。在使用Android 2.1的Android模拟器上,您只能获得最后一次警报。如果我更改代码以使用调试语句,我可以看到它们全部触发:

Ti.API.info( "building Item");
var i = new Item();
Ti.API.info("initializing Item");
i.initialize(1);
Ti.API.info("submitting");
i.Submit(itemSubmitted);

日志输出:

11-08 08:52:48.520: INFO/TiAPI(1319): (kroll$5: app://app.js) [295,1141] building Item
11-08 08:52:48.530: INFO/TiAPI(1319): (kroll$5: app://app.js) [3,1144] initializing Item
11-08 08:52:48.530: INFO/TiAPI(1319): (kroll$5: app://app.js) [2,1146] submitting

在Titanium中,alert函数不会像浏览器中的JavaScript那样暂停执行上下文。因此,第一个警报打开时,将调用第二个“警报”。您可能在您的代码中尝试一次打开2个警报,这在Android上的Titanium Mobile中无法完成。

我建议的另一件事是将函数设置为变量,以便更容易传递:

var itemSubmitted = function(){
  alert("tada!");
}

查看优秀的Forging Titanium系列和Kevin Whinnery's JavaScript talk from CodeStrong以获取更多信息。

答案 1 :(得分:0)

试试这个:而不是在你的Item类中使用this.ID = 0,尝试只使用ID = 0;