Определение классов JavaScript в Appcelerator Titanium - PullRequest
0 голосов
/ 07 ноября 2011

Я пытаюсь использовать 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 ]

1 голос
/ 08 ноября 2011

Я поместил этот код в пустой файл app.js, используя Titanium Mobile SDK 1.7.5, и он работает, как и ожидалось, в iPhone Simulator. В эмуляторе Android с использованием Android 2.1 вы получаете только последнее предупреждение. Если я изменю код, чтобы использовать операторы отладки, я увижу, как они запускаются:

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 оповещения одновременно, чего нельзя сделать в Titanium Mobile на Android.

Еще одна вещь, которую я хотел бы предложить, это установить ваши функции в переменные, чтобы их было легче передавать:

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

Проверьте превосходную серию Forging Titanium и разговор Кевина Уиннери о JavaScript от CodeStrong для получения дополнительной информации.

0 голосов
/ 07 ноября 2011

Попробуйте это: вместо использования this.ID = 0 в вашем классе Item, попробуйте использовать просто ID = 0;

...