私のプロジェクトには次のことが必要です:
- グローバル変数に値を設定する
- 次に、このグローバル変数を使用する外部 JavaScript をロードします
次に、変数を変更し、同じ JavaScript を再度ロードしますが、外部 JavaScript は次のようになります (Google Blockly を使用):
Blockly.Blocks[block_name+'_autogetter_state'] = { init: function() { this.setName(block_name); } };
グローバル変数はblock_nameです。そこに変数を渡すので、変数のみが渡され、その値は渡されないようです。したがって、javascript を 2 回呼び出して HTML にロードすると、両方のブロックが同じように見えます。
おそらくJavaScriptをロードする方法は重要ではないので、試しました:
$('#htmlElement').append('<script src="' + jsURL + '" type="text/javascript"><\/script>');
また、AJAXを介して、<script>
タグ間のHTMLにロードします。
インポートされたコードは次のようになります。
<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>
最初のブロックの名前は B で、2 番目のブロックも同様ですが、最初のブロックは A で、2 番目のブロックは B でなければなりません。楽しい部分は、名前 A のブロックを使用すると機能するため、システムは名前 A のブロックを認識しますが、名前 B で表示します。
それらが非同期的にロードされている間に、メソッド .Blocks の背後にある関数が引き継ぎ、それを B として登録している間に、グローバル変数が A で半分埋められて B になる可能性もあります...
しかし、今では、インポートされたjavascriptにグローバル変数を渡すことに問題がないことを確認したいと思います...そして、私の創造性はこのケースですでにかなりなくなっているので、どんな提案にもオープンです...