このjsFiddleは私の問題を浮き彫りにします。
これは、オブジェクトが定義され、socket.ioを介してページに送信される機能を模倣しています。
が関数であるかどうかをチェックするsetInterval関数Pots
があり、関数である場合はイベントを発生させます。そのイベントの間、私は新しいインスタンスをインスタンス化しようとしますPots
が、それは未定義であるとだけ言われます。
コード:
var Pots;
$(document).ready(function(){
var timerId = 0;
var otherTimer = 0;
otherTimer = setInterval(function() { console.log("Creating"); Pots = function() {}; }, 5000);
timerId = setInterval(function() {
console.log("Checking");
if (_.isFunction(Pots)) {
console.log(Pots);
clearInterval(timerId);
clearInterval(otherTimer);
var evt = document.createEvent('Event');
evt.initEvent('ObjectsAvailable', true, true);
document.dispatchEvent(evt);
}
}, 1000);
});
document.addEventListener('ObjectsAvailable', function(e) {
console.log(Pots);
var Pots = new Pots();
});
編集
このコメントを以下に投稿しました:これは実際にはこの宣言を含むBackbonejsコレクションである
ことを指摘する必要が。私がイベントを行った理由は、「Pots」が設定されていないときがあるためです(おそらく、ブラウザがPotsが宣言されたファイルをロードする前に)。jsFiddleは、その時間が存在することをシミュレートするためだけのものでした。私の実際のコードでは「otherTimer」は存在せず、Potsは最終的には関数ですが、イベント中に使用しようとすると機能しません。Pots
var Pots = Backbone.Collection.extend({model: Pot});
ObjectsAvailable