1

Drupal サイト内で既存の MooTools コードを適切に機能させようとしています。MooTools のコードが単独で動作することは知っています。ページに MooTools ライブラリをロードすると、jQuery が機能しなくなります。

jQuery の後に MooTools を含めています。これにより、(MooTools 開発者によると) Moo が既にロードされている jQuery ライブラリから既に定義されている $ を盗むのを防ぐことができます。

Moo コード内の $ のすべての参照を document.id に変換しました。

ページをロードすると、Moo コードは機能しますが、jQ コードは機能しません。Moo はまだ $ 変数を jQ から盗み出し、独自に再定義しているようです。テスト目的で、ロードしている Moo コードは単純な 12 アコーディオン スクリプトです。この問題を解決した場合に使用する必要がある、より複雑なものがあります。

Drupal は jQuery を多用するため、jQ の no_conflict モードを使用することは現実的な選択肢ではありません。私が理解していることから、ドルセーフモードを考えると、これは可能であるはずです.

私は MooTools Core 1.2.4 と MooTools More 1.2.4.4 と jQuery 1.2.6 を使用しています (1.4.2 も試しました)。

4

5 に答える 5

3

奇妙なことに、これは正直なところ、起こってはならないことです。mootools 1.2.3(?) (1.2.1 だった可能性があります) 以降、ページで既に定義されている場合、 $ の割り当てを引き継ぐことはありません。つまり、ロードの順序が次のとおりである場合:

jqueryムーツール

...その後、moootools は自動的に互換モードに入り、document.id に戻ります。これが当てはまらない唯一の例は、jquery が noConflict モードでロードされている場合です。これにより、jQuery が $ に割り当てられなくなり、mootools がそれを取得しない理由がなくなります。

とにかく、それが理論です。異なる動作が見られる場合は、ブラウザで何か問題が発生しています。スクリプトを遅延ロードまたは非ブロック/並列ロードしていますか?

ここでのベスト プラクティスは通常、jquery をネイティブ モード (noConflict なし) のままにし、$ を document.id に再割り当てして、スコープ内の mootools を次のように処理することです。

<div id="foo"></div>

その後:

$("#foo"); // jquery

(function($) {
    $("foo"); // mootools.
})(document.id);

最近、この件に関してたくさんの質問がありました。mootools の最新の質問を読んでください。それができない場合は、プロジェクトに URL を投稿してください。

明らかに、これを確認/確認するために console.log($) を実行できます: http://www.jsfiddle.net/AxVqy/ -> testcase

于 2010-05-12T09:04:08.790 に答える
3

$を使用して jQuery 関数にアクセスする代わりに、いつでも を使用できますjQuery()

を使用する場合は、独自の識別子を渡すこともできます.ready()。例:

jQuery(document).ready(function(myIdentifier){

   myIdentifier(); // this is the jQuery reference!

});
于 2010-05-11T18:27:36.077 に答える
1

jQueryの代わりに使わないのはなぜ$ですか? 何らかの理由でそれができない場合はnoConflict();、jQuery で $ の使用をやめなければならないという意味ではありません。次のようなことができます。

<script type="text/javascript" src="mootools.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
  $.noConflict();
  jQuery(document).ready(function($) {
    // Code that uses jQuery's $ 
  });
  // Code that uses mootools $ 
</script>

おそらく、プラグインでjQueryを使用する際に問題が発生する可能性があります$(function(){}jQuery(document).ready(function($) {});

最初に mootools をロードしていることに注意してください。コードの各セクションで次のようなことを行うこともできます。

(function($) {
    $("id"); // mootools.
})(document.id);


(function($) {
    $("#id"); // jQuery.
})(jQuery);

すべてまたは1つ、または異なるライブラリの任意の組み合わせをロードするための解決策を見つけるのと同様の問題があります。その方法を理解したら、それをあなたと共有できると確信しており、あなたは間違いなくこれを行うことができます. しかし、上記の解決策はあなたのために働くはずです.私はすでにこれを使ってjQueryとmootoolsを好きな順序でロードすることができました.

于 2010-10-11T18:28:44.833 に答える
0

両方を使用する必要がある場合は、最初にjQueryを含め、次にMootools(1.3)を含めます。jQueryを気にする必要がない場合は、Mootoolsの互換性が自動的に$開始され、MootoolsとjQueryを定義してクイックショートカットを作成する(function($){ /*stuff*/ })(document.id)など、競合は発生しません。

于 2010-12-15T03:13:35.667 に答える
0

これは、ケースで使用されるプラグインにさらに依存します。jQuery自体は問題なく動いているかもしれませんが、プラグインが推奨通りに書かれていないと動きません。

于 2010-05-11T18:23:31.060 に答える