モジュールを1ページで2回、それぞれ異なるデータで使用したい。私の場合は、例えば、2回使用された口ひげテンプレート、モジュールが必要です。私の口ひげテンプレートでrequireJSモジュールが含まれている瞬間にロードする方法
{{> template-requiretest }}
{{> template-requiretest }}
を、私はこのようなものだ:init関数呼び出しで
<script>
var data1 = [x,y,z];
var data2 = [x,y,z];
var theId = (some random id);
require(['app/myApp'], function(myApp){
myApp.init();
});
</script>
を私は "myApp"をdata1配列とdata2配列で別々に2回実行することを期待していましたが、 "myapp"内のconsole.logで単純にテストした "myapp.init()"は一度だけ実行されます。
コードは単に間違っていますか、またはAMD/requireJSがどのように動作するのか迷っていますか?
EDIT:さらにテスト:
var random = Math.floor((Math.random() * 1000) + 1);
var el = document.getElementById('someId');
el.id += '-'+random;
var theId = el.id;
console.log("ID, set in mustache: ",theId);
require(['app/myApp'], function(myApp){
console.log("ID, logged inside reqJS:",theId);
myApp.init();
});
そして、コンソール出力はこれです:
xyz.html:131 ID, set in mustache: someId-428
xyz.html:181 ID, set in mustache: someId-248
myApp.js:3 ##### running the script now #####
myApp.js:4 ##### using ID: someId-248 #####
xyz.html:134 ID, logged inside reqJS: someId-248
xyz.html:184 ID, logged inside reqJS: someId-248
口ひげテンプレートが2回ロードしまった後にこれは、モジュールがロードされていることを示し、最後に生成されたIDのみでmyApp.jsのスクリプトを2回実行しています。
ここに表示されているコードはOPのコードと同じ問題があります: 'myApp.init(theId)'は 'theId'と同じ値で2回呼び出されます。 – Louis
@ルイスOPがどのようにしてコードを2度呼び出すのかはわかりません。彼らはもちろん、それを行うことができ、毎回異なるIDで呼び出すことができます。私は一度だけそれを呼んだので、それは私の問題ではありません。要は、毎回新しいオブジェクトを作成する必要があるため、遅延ロードによって提供されるオブジェクトを単純に使用することはできません。 –