0

サードパーティのJavaScriptライブラリのデバッグに2時間近く費やしたところ、そのライブラリに渡した配列がパイプのどこかで文字列に変換されていることがわかりました...理由や方法はわかりませんが、すぐにプロジェクトからPrototypeを削除すると、すべてが正常に機能します。

それは、プロトタイプがDOMを拡張しているためでしょうか?私の最良の選択肢は何ですか?プロジェクトでは、Prototypeの要素イテレーター、DOM操作、bind()メソッド、および文字列マニピュレーターを使用していますが、それらを失いたくありません。

それをすべて備えているが、DOM拡張機能に敏感なサードパーティのJSライブラリで正常に動作するライブラリはありますか?

4

3 に答える 3

2

過去にPrototypeを使用したことがあるので、Prototypeを「うまく再生」する方法はありません(jQueryのnoConflictモードに似ています)。

プロトタイプの背後にあるまさにそのアプローチはこれを防ぎます。Prototypeのパンとバターは、Prototypeメソッドでオブジェクトを操作するとすぐにオブジェクトに対して呼び出されるObject.extend()メソッドから取得されます。言うまでもなく、Prototypeは、あなたのオブジェクトをいじる前に、コアJavaScriptオブジェクトをすでに変更しています。

一方、jQueryはすべてjQueryオブジェクトに自己完結しています(つまり、私の知る限り、jQueryが含まれているとJavaScript名前空間に追加されます)。

同様の機能を持つ他のライブラリはありますか?確かに、実際、あなたは今ではこれを聞くのにうんざりしていると確信していますが、おそらくjQueryを使用してほとんどのことを行うことができます。ただし、避けられないことは避けられません。コードを書き直すことです。他のフレームワークと同じように実行されることはなく、同じ結果/動作が得られることは言うまでもありません。

したがって、あなたの選択は次のとおりです。

  • プロトタイプを削除し、それを使用して他のものを使用したものを書き直します
  • 代替または不在を完全に支持して、サードパーティのライブラリを削除します
  • うまく機能するようにprototype.jsまたはthirdpartytool.jsを書き直してください(もちろん、これはひどいハックであり、将来、新しいリリースがリリースされたときに一方または両方のツールを「アップグレード」したいときに、より多くの頭痛の種になります)
于 2009-08-21T18:36:35.787 に答える
0

私はjQueryで成功しました。を呼び出すとjQuery.noConflict()、他のJSライブラリと非常にうまく機能します。

于 2009-08-21T18:21:20.047 に答える
0

私の苦い経験のビット。

XULアプリケーション用の独自のフレームワークを書き終えたところです($やプロトタイプのlibの甘さのないコンポーネントモデルのようなものが必要です)。それは非常に小さく、便利で簡単です。しかし...今だけ、すべてがフレームワークを使用する準備ができたとき、私はそれがXULコンテキストで完全に死んでいることに気づきました。主な障害は、JavaScriptエンジンが、関数、オブジェクトなどのベースオブジェクトのすべての変更を破棄することです。したがって、物事を機能させる主要な拡張機能(fx Function.prototype.toClass、overrideなど)は、それらが定義されているファイルの外部には表示されません。

于 2010-02-08T11:13:12.603 に答える