2012-04-27 7 views
2

htmlドキュメントの最後にjQueryが埋め込まれたCMSのプラグインを作成しています。jQueryがフッターに挿入されたときの変数の定義方法

私は動的にそのような私のテンプレートのコード内のいくつかの変数を定義します:

<script> 
    var name = '<?php echo $nameTakenFromTheDatabase; ?>'; 
</script> 

このコードは、私のプラグインの一部であり、それはすべてのページに埋め込まれてないです。したがって、名前はすべてのページで定義されていません。

私はまた、別のファイル(つまり、自動的にCMSによってページの末尾に追加されます)にこのJavaScriptコードを持っています:jQueryのは、上部に埋め込まれていた場合、私のような何かをしたい

​​

私のテンプレートのコード内でこの:

<script> 
    var name = '<?php echo $nameTakenFromTheDatabase; ?>'; 

    $(document).ready(function() { 
     new MyNamespace.MyClass(name);   
    }); 
</script> 

しかし、jQueryを使って私は($がまだ定義されていない)ことを行うことはできません一番下に含まれています。私も、すべてのページで実行されるので、別のコードファイルにjQuery-DomReady呼び出しを追加することはできませんが、名前 varはすべてのページで初期化されず、コードが分割されます。

どうすればよいですか?古き良きdocument.ready賢明なアプローチですか?

+0

ソリューションに基づいて、あなたは、私が「古き良きdocument.readyは」ここに賢明なアプローチだと思い記述提案と問題。もちろん、より複雑な問題があってもここでそれを単純化すれば、私は@aabergの解決策に投票するでしょう。 – sbgoran

答えて

5

作ることができます。

$('document').ready(function() { 
    if (typeof runWhenReady != 'undefined') { 
     runWhenReady(); 
    } 
}); 

:あなたはページの一番下に追加されますグローバルファイルに

<script> 
    var name = '<?php echo $nameTakenFromTheDatabase; ?>'; 

    function runWhenReady(){ 
     new MyNamespace.MyClass(name);   
    } 
</script> 

次に、あなたのページにこのような何かを行う場合は

は、あなたがこのような何かを行うことができますあなたが創造的であれば、runWhenReadyにメソッドのコレクションを作ることができます。これは、ページの準備ができたら必ず読み込まれます。私は、アレイの使用例を追加した

EDIT:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
     "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <title></title> 
</head> 
<body> 

    <script type="text/javascript"> 
     // check if array is already created. This is necessary if it is possible to render multiple pages which uses the runWhenReadyFunctions collection. 
     if (typeof runWhenReadyFunctions == 'undefined'){ 
      window.runWhenReadyFunctions = new Array(); 
     } 

     runWhenReadyFunctions.push(function(){ 
      $('#testDiv').text('hello world!'); 
     }); 

     runWhenReadyFunctions.push(function(){ 
      $('#testDiv2').text('hello another world!'); 
     }) 

    </script> 


    <div id="testDiv"></div> 
    <div id="testDiv2"></div> 

    <script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"></script> 
    <script type="text/javascript"> 
     if (typeof runWhenReadyFunctions != 'undefined') { 
      $.each(runWhenReadyFunctions, function(idx, func){ 
       func(); 
      }); 
     } 
    </script> 

</body> 
</html> 
+0

私はそれをやる方法だと思います! – shredding

0

EDIT - 大丈夫ですが、グローバルスペースを混乱させるべきではありません。あなたは、<script>タグをjQueryを含むタグの下に置かないと分かりません。そうしないと、あなたはあなたのスクリプトでメソッドを定義し、グローバルのJavaScriptファイルからそれらを実行することができAJAX呼び出し

<script> 


    $('document').ready(function() { 
     $.getJSON('getmyname.php', function(data){ 
      new MyNamespace.MyClass(data.name);   
     }); 
    }); 
</script> 
+0

私はそれを(MyNamespace_name)と考えました...しかし、私はグローバルな範囲にものを入れたいという考えが嫌いです。私はPHPから来て、私はレッスンを学んだ^^ – shredding

+0

@shreddingはい私の解決策は最適ではありませんが、あなたはjQueryのインポートの下にスクリプトタグを置いていませんか? do –

+0

CMSはTypo3で、拡張子はextbaseです。 PHP変数が利用可能なビューテンプレートがあります。これは、ドキュメントの検索にビューが配置されると追加されます。純粋なJavascriptファイル(buttomに追加されています)を追加することはできますが、PHP Varsはそこでは使用できません(実際には解析されずにブラウザに渡されます)。私はCMSにアクセスできない、私はプラグインを書いているだけです。 – shredding

関連する問題