2009-06-15 11 views
1

私はjQueryを使ってウィジェットフレームワークをセットアップしようとしていますので、ウィジェットのxhtmlを解析してフレームワークページに含めて、Javaスクリプトをインポートする必要があります。問題は、これが名前空間の汚染につながる可能性があることです。 Javaスクリプトを実行時にネームスペースにロードすることは可能ですか?jQueryを使用して動的にjavascriptをインポートしますか?

おそらく私が見落としているいくつかのより良い方法がありますか?

おかげで、 ピート

答えて

1

が問題

ではありません
var holdsWidgetUUID = "widgetUUIDValue"; 
eval(holdsWidgetUUID + "= (" + data + ")"); 
alert(eval(holdsWidgetUUID)); 

またはご希望の場合

var UUID = "widgetUUID"; 
var holdsWidgetUUID = "widgetUUIDValue"; 
window["widgets"] = new Array(); 
window["widgets"][holdsWidgetUUID] = data; 
alert(window["widgets"][holdsWidgetUUID]); 

問題は、あなたが含まjavascriptの時に特定のコーディングの練習を強制場合、私は実用的なソリューションを持っている()

dynamicvariablename.methodnameのような呼び出し可能で動作するようにロードされたJavaScriptを得ています。たぶんこれはあなたを正しい方向に導きます。

これはウィジェットのjavascript(works.js)です。それは内部的に定義されたフィールドとメソッドを持つjavascript "クラス"であることに注意してください。それ自体でどちらが低名前空間の汚染を保持し、私たちの希望を呼び出す形x.getInfo()

function() { 
    this.type = 1; 
    this.color = "red"; 
    this.getInfo = function() { 
     return this.color + ' ' + this.type + ' widget'; 
    }; 
} 

を達成でき、これは名前空間

<html> 
<head> 
    <title>Widget Magic?</title> 
    <script type='text/javascript' src='jquery.js'></script> 
    <script type='text/javascript'> 
    var UUID = "widgetUUID"; 
    var holdsWidgetUUID = "widgetUUIDValue"; 
    window["widgets"] = new Array(); 
    $.get("works.js", function(data) { 
     window["widgets"][holdsWidgetUUID] = eval("(" + data + ")"); 
     $(document).ready(function() { 
     window["widgets"][holdsWidgetUUID] = new (window["widgets"][holdsWidgetUUID])(); 
     alert(window["widgets"][holdsWidgetUUID].color); 
     alert(window["widgets"][holdsWidgetUUID].getInfo()); 
     }); 
    }); 
    </script> 
</head> 
<body> 
    <p>Just some stuff</p> 
</body> 
</html> 
+0

この説明は私を大いに助け、ありがとう!このメソッドは、私がウィジェットAPIを指定するようになったのですばらしいです。 – slypete

-2

は、ロードするJavaScript、それ自体は、すでに独自の名前空間を使用する必要があります。

+1

理想的には、実行時にそれを含むファイルです。そして空も緑色でなければならない。しかし、そうではありません。これは非常に有用な答えではありません! –

1

あなたはこのような何かを行うことができます...そして、

var myOtherFramework = null; 

$.get("myScript.js", function(data) { 
    myOtherFramework = eval("(" + data + ")"); 
}); 

など、それを参照する...ジョシュStodolaは、実行時に変数を作成述べたように

myOtherFramework.funcName(); 
+0

これは私がやっていることのようなものです。ただし、実行時にvar myOtherFramworkの名前を定義する必要があるため、動作しません。たとえば、javascriptの名前空間は、ウィジェットインスタンスのUUIDである必要があります。私はランタイムまで残念ながらそれを知らない。 – slypete

+0

これは簡単です:eval( "placeUUIDhere =(" + data + ")"); –

関連する問題