2016-03-25 3 views
0

私のプロジェクトがに必要としてJavaScriptを読み込む:グローバル変数へ動的グローバルVAR

  • 設定値
  • その変数に変更して、再度同じjavascriptの間をロードし、このグローバル変数
  • を使用して外部のJavaScriptを読み込みます外部Javascriptを(GoogleのBlocklyを使用して)ようになります。

    Blockly.Blocks[block_name+'_autogetter_state'] = { 
        init: function() { 
         this.setName(block_name); 
        } 
    }; 
    

グローバル変数はブロック名です。私はそこに変数を渡しているので、それは変数に渡され、値は渡されないようです。 JavaScriptを2回呼び出してHTMLにロードすると、両方のブロックが同じように見えます。 AJAX経由

$('#htmlElement').append('<script src="' + jsURL + '" type="text/javascript"><\/script>'); 

もが、その後<script>タグの間HTMLにそれをロードします。

おそらく私はJavaScriptをロードする方法は重要ではありません、私が試してみました。

ので、インポートしたコードは、その後、次のようになります。最初にAも、あなたが名前のブロックを使用するときに、第2のB.楽しい部分が来るはずですしつつ、第1ブロックは、また名前= Bと第二である一方、

<script> var block_name='';</script> 
<div id="htmlElement"> 
     <script> 
      block_name='A'; 
      Blockly.Blocks[block_name+'_autogetter_state'] = { 
       init: function() { 
        this.setName(block_name); 
       } 
      }; 
      block_name='B'; 
      Blockly.Blocks[block_name+'_autogetter_state'] = { 
       init: function() { 
        this.setName(block_name); 
       } 
      }; 
     </script> 
</div> 

それは動作するので、システムは名前Aのブロックを知っていますが、名前Bで表示します。

非同期にロードされている間、グローバル変数はAで半分満たされ、Bになります.Blocksが引き継ぎ、Bとして登録します。

しかし今は私が行っているように、グローバル変数をインポートされたJavaScriptに渡すことに問題はないことを確認したいと思います...そして、私の創造性はすでにこのケースではかなり消えてしまっているので、任意の提案に開放しています...

答えて

1

は、コードの重複を避けるためとスケーラビリティを向上させるために、配列とループを使用することができます。

var block_names = ['A', 'B']; 
block_names.forEach(function(block) { 
    Blockly.Blocks[block + '_autogetter_state'] = { 
    init: function() { 
     this.setName(block); 
    } 
    };  
}); 

//編集:のsetNameは、fnでブロックするblock_nameを。

+0

具体的な問題は本当に明確ではありません。 – charlietfl

+0

こんにちはcharlietfl、私はそれを仕事にして、あなたの解決策が正しいいくつかの裁判の後、何が起こっていたのか何らかの詳細な説明をしてください。私はそれを見ることができるので、グローバル変数を使用するのはすべて誤りですが、ソリューションではforEach関数のプライベート変数が使用されるため、ブロック関数はグローバルではないので同じ変数を使用しません。そうですか?どうもありがとうございました! – Wenza

+0

また申し訳ありませんが、以前のコメントは半分でした。私はそれを通過し、それを削除しましたが、それ以降のテストでは動作していたので、古いコメント – Wenza

関連する問題