Магистраль на BlackBerry OS5 - возможно ли это?
Я разрабатываю мобильное приложение, используя Backbone, jQueryMobile и Phonegap. Приложение отлично работает на Android, iOS и BB >= 6, но на BB5, как и ожидалось, возникает множество проблем.
У меня сейчас проблемы с самой Backbone. Я отлаживаю его и похоже, что проблема в определении маршрутов. Приложение вылетает во время запуска из-за чего-то связанного с этим (все еще исследует, но отладка является болезненной для BB5...).
Кроме того, я прочитал, что BB5 не будет хорошо работать с прослушиванием хэшей, на которое полагается Backbone для навигации, поэтому мне интересно, смог ли кто-нибудь создать магистральное приложение на OS5, или это просто невозможно?
2 ответа
Я обновляю этот вопрос на тот случай, если кто-то столкнется с той же проблемой:
Короткая история: невозможно запустить Backbone на OS5. Я отладил в магистрали, и некоторые инструкции с регулярными выражениями вызывали сбой. Даже если они будут исправлены в будущем, мы определили, что поддержка js просто недостаточно хороша, и в итоге отказались от версии для OS5.
Это, вероятно, не стоит в большинстве случаев, но это выполнимо.
Мне удалось запустить приложение после довольно долгой работы - поддержка javascript в OS 5.0 действительно невелика, а отладка очень и очень медленная, как указано в ответе bfcapell.
Чтобы заставить работать магистраль, вам нужно закомментировать код, который использует событие hashchange для обработки изменений URL (предполагается, что используется маршрутизатор). Существует запасной вариант в магистрали, который использует setinterval для опроса изменений.
// Depending on whether we're using pushState or hashes, and whether
// 'onhashchange' is supported, determine how we check the URL state.
/*if (this._hasPushState)
{
alert('pushstate');
$(window).bind('popstate', this.checkUrl);
} else if (this._wantsHashChange && ('onhashchange' in window) && !oldIE)
{
alert('hashchange');
$(window).bind('hashchange', this.checkUrl);
} else if (this._wantsHashChange)
{*/
this._checkUrlInterval = setInterval(this.checkUrl, this.interval);
//}
Метод foreach в подчеркивании также необходимо изменить, чтобы не использовать собственный метод foreach. Это необходимо для правильного отображения коллекций.
var each = _.each = _.forEach = function (obj, iterator, context)
{
if (obj == null) return;
/*if (nativeForEach && obj.forEach === nativeForEach)
{
obj.forEach(iterator, context);
}
else*/
if (obj.length === +obj.length)
Вышеуказанное должно получить как минимум работающую магистраль. (Я говорю в основном потому, что у меня полностью работающее приложение, но я подозреваю, что вовремя обнаружу еще пару специфических проблем для OS5)