私はあるライブラリを別のライブラリに目に見えない形で入れ替えるつもりです。ここでは、問題の簡略化したスケッチを示します。 x
は古い既存のライブラリを表し、y
は新しいライブラリを表し、$
は影響を与えたいグローバルです。目標は、withLib
がコールバック内のすべてのコードの$からyへの変更を成功させることです。一時的にJavaScriptのグローバル変数を変更する
この例では、内部コンテキストではなく外部コンテキストでコードに影響を与えることができます。私はクロージャーでcallback()
をラップしようとしましたが、それはどちらもそれをしませんでした。
x = "1.0"
y = "2.0"
$ = x;
withLib = function(callback) {
$ = y
callback()
$ = x
}
withLib(function(){
console.log($, $ == "2.0" ? "outer success" : 'outer fail')
someCb = function() {
console.log($, $=="2.0" ? "inner success" : "inner fail")
}
})
someCb()
// results in "outer success" and "inner fail"
答えには適切な種類のクロージャを設定する必要がありますが、どうやって見えるのか分かりません。何かご意見は?古いライブラリを使用する機能(または機能)の上部に
どのような2つのフレームワークですか?より良い解決策があるかもしれません。 – alex
ライブラリ 'x'は' jQuery.noConflict() 'で得られた古い未知のバージョンのjQueryまたは類似のライブラリであり、ライブラリ' y'は新しく読み込まれたjQueryです。 'withLib'でラップされたコード(とそのコールバックのどれか)が新しいjQueryを使うことを望みます。可能? – Matt