2

私は開発中の Ember.js アプリケーションを持っていますが、これはうまく機能しています。私は現在、JsSIP と呼ばれる SIP over Websockets ライブラリに統合しようとしています。私の Ember アプリと別の概念実証 SIP アプリはどちらも、独立してうまく機能します。ただし、2 つを統合するとすぐに、SIP ライブラリに奇妙なエラーが表示され始めます。最終的に、2 つの API 間の名前空間の問題であるという事実に絞り込みました

Ember.js と、何らかの種類の DOM 操作を行う他のライブラリ (JQuery Mobile など) との間の名前空間の競合に関する SO の質問を少なくとも 1 つ見たことがあります。私の知る限り、私が使用している SIP ライブラリは、実際に DOM を操作することはほとんどありません。RequireJS を使用するためのいくつかの提案を見てきましたが、クライアントをモジュール化する必要はなく、名前空間の競合が解決されるかどうかさえわかりませんでした。Ember.Namespace で何かをラップすることは役に立ちますか?

コアの問題を示す非常に単純なJSFiddleを作成しました。2 つのライブラリ間でこの問題を解決する方法についての提案は大歓迎です。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();
4

1 に答える 1

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/

于 2013-04-05T01:59:13.890 に答える