【问题标题】:Titanium Facebook module issueTitanium Facebook 模块问题
【发布时间】:2015-06-29 16:37:27
【问题描述】:

我正在使用本机 Facebook Titanium 模块,但遇到以下问题。

在我的应用程序中,您可以从两个不同的窗口登录 FB。

在第一个中,我安装了模块并向模块添加了一个“登录”侦听器。

在第二个窗口中我做了同样的事情,我实例化了模块并添加了一个“登录”侦听器。

问题如下:第二个 addEventListener 没有覆盖第一个(看起来第二个 Facebook 'require' 只是指向在第一个窗口中实例化的模块的指针)。

因此,它发生了以下情况:当我尝试授权用户并进入登录侦听器时,事实证明我总是调用第一个,而不是第二个(第二个永远不会被调用)。

我尝试删除第一个 eventListener,但没有成功。此外,它们“生活”在遥远的窗口中,似乎无法正确删除此侦听器。

任何帮助表示赞赏, 伊恩尼斯

【问题讨论】:

  • 为什么不把所有逻辑放在一个可以从多个控制器访问的 sharedInstance 中?
  • 我不想分享任何东西,我想要不同的对象
  • 嗨 3000!尝试使用gist.github.com/minhnc/2333095 添加和删除事件
  • 我的情况不同:问题是我需要用另一个替换一个 eventListener:这一直有效,直到 eventListener 位于应用程序根目录以外的位置,但如果事件在那里我可以不要替换它

标签: ios facebook titanium appcelerator


【解决方案1】:

我希望这能澄清你所看到的:

  • 缓存模块是标准的 CommonJS 行为,第二个和后面的 require() 将为您提供对第一个实例的引用。
  • 顾名思义,addEventListener 添加了一个事件侦听器,而不是替换之前添加的侦听器。

您应该获得两次login 事件,一次为您添加的每个事件侦听器。如果不深入了解您的代码,我无法说出为什么它不为您执行此操作。

【讨论】:

  • 嗨 Fokke(谢谢):我通常使用 CommonJS 模块来创建交互式对象的“模板”(我称它们为“实例”)。现在看起来我总是在修改同一个实例,所以,当我在另一个窗口中实例化它(使用 require)时,我总是指向那个,如果我向那个添加一个监听器,登录是与另一个窗口中的另一个实例共享。我通过做一件疯狂的事情来“解决”:登录时我触发了一个自定义事件。我无法添加另一个登录侦听器,它不起作用。我可以删除它,然后再次添加它,但我必须将它添加回“第一个”实例......
  • 这两个实例位于两个不同的窗口中,一个位于导航控制器 (iOS) 的根目录中,另一个位于该窗口“之后”的多个窗口中。问题是,基于窗口,登录主体必须执行不同的操作:如果您在第一个窗口(例如),它必须打开另一个窗口并进行服务器调用,而第二个窗口必须在执行之前自行关闭一些计算。所以,如果登录是共享的,应用程序就会发疯......
  • 如果您不能将多个事件监听器添加到 facebook 模块的登录事件,那么这是一个错误。请创建一个测试用例(单个文件复制 app.js 文件)并创建一个 JIRA 票证(jira.appcelerator.org),以便我们可以复制和修复它。
  • 好的,我会尽快做(希望下周六早上能做)
  • 有什么消息吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多