Ember.js命名空间问题

时间:2013-04-04 16:04:24

标签: ember.js javascript-namespaces

我有一个Ember.js应用程序,我一直在开发,并且一直很好用。我现在正在尝试集成一个名为JsSIP的SIP over Websockets库。我的Ember应用程序和独立的概念验证SIP应用程序都可以独立工作;但是,只要我将两者整合在一起,我就会开始在SIP库中看到奇怪的错误。我最终将事情缩小到这两个API之间的名称空间问题

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

我创建了一个超级简单的JSFiddle来演示核心问题。我非常感谢有关如何解决这两个库之间的问题的任何建议。这是包含在小提琴中的裸骨代码:

// 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 个答案:

答案 0 :(得分: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/