1

我正在使用 Backbone、jQueryMobile 和 Phonegap 开发一个移动应用程序。该应用程序在 Android、iOS 和 BB >= 6 上运行良好,但正如预期的那样,在 BB5 上出现了无数问题。

我现在面临 Backbone 本身的问题。我正在调试它,看起来问题出在路由定义中。应用程序由于与它相关的原因在启动时崩溃(仍在调查,但调试对于 BB5 来说很痛苦......)。

另外,我读到 BB5 不会很好地配合哈希监听,Backbone 依靠它来进行导航,所以我想知道是否有人能够在 OS5 上创建主干应用程序,还是根本不可能?

4

2 回答 2

2

我正在更新这个问题,以防有人遇到同样的问题:

小故事:不可能在 OS5 上运行 Backbone。我调试到主干,一些带有正则表达式的指令导致崩溃。就算这些以后都修好了,我们还是确定js支持不够好,最后放弃了OS5版本。

于 2012-04-25T08:42:55.180 回答
0

在大多数情况下,这可能不值得,但这是可行的。

经过大量工作后,我设法让应用程序运行 - OS 5.0 中的 javascript 支持确实不是很好,并且调试速度非常慢,正如 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 特定问题)。

于 2012-09-06T12:49:22.653 回答