Ember.js 命名空间问题

Posted

技术标签:

【中文标题】Ember.js 命名空间问题【英文标题】:Ember.js Namespace Issues 【发布时间】:2013-03-26 19:42:31 【问题描述】:

我有一个我一直在开发的 Ember.js 应用程序,它运行良好。我现在正在尝试集成一个名为 JsSIP 的 SIP over Websockets 库。我的 Ember 应用程序和单独的概念验证 SIP 应用程序都可以独立运行;但是,一旦我将两者集成在一起,我就会开始在 SIP 库中看到奇怪的错误。我终于把事情的范围缩小到这是 2 个 API 之间的命名空间问题

我至少看到过另一个关于 Ember.js 和其他执行任何类型 DOM 操作的库(例如 JQuery Mobile)之间命名空间冲突的 SO 问题。据我所知,我使用的 SIP 库对 DOM 的实际操作很少。我已经看到了一些使用 RequireJS 的建议,虽然我真的不想模块化我的客户端,甚至不知道它是否会解决命名空间冲突。将东西包装在 Ember.Namespace 中会有帮助吗?

我创建了一个超级简单的JSFiddle,它演示了核心问题。非常感谢任何关于我如何解决这两个库之间的问题的建议。这是 Fiddle 中包含的基本代码:

// JsSIP code
try

    var configuration = 
      'uri':         "example@sip2sip.info",
      'password':    "password",
      'trace_sip':   true,
      'ws_servers':  "ws://example.com"
;
    myPhone = new JsSIP.UA(configuration);
    myPhone.start();

catch(e)

    console.log(e.message);


// Ember code
window.App = Ember.Application.create();

【问题讨论】:

【参考方案1】:

JsSIP.UA 的构造是将 ws_servers 转换为一个数组并使用 for(element in array) 对其进行迭代,这会在 Ember.js 制作的 Array 原型的扩展中跳闸。您可以使用以下代码禁用它,以便您的 SIP 库开箱即用(在包含 Ember 脚本之前添加它):

window.Ember = ;
Ember.EXTEND_PROTOTYPES = false;

不过,这可能会对您的 Ember 应用产生重大影响。阅读此文档页面以了解更多信息:http://emberjs.com/guides/configuring-ember/disabling-prototype-extensions/

【讨论】:

非常感谢您的快速回复!!!这很有意义。我知道这是两个库之间的冲突,只是无法缩小确切的问题范围。再次感谢!! :)

以上是关于Ember.js 命名空间问题的主要内容,如果未能解决你的问题,请参考以下文章

C++问题:关于匿名命名空间

一个wpf命名空间问题

应用命名空间和实例命名空间

有问题,找不到类型或命名空间名称“List”

处理命名空间中的命名空间模型(类)

命名空间