私は完全にここで何かが欠落している場合がありますが、私は以下の持っている: コレクションを作成した後にbackbone.jsを実行して関数を実行しますか?
- 「すべて」のデータをカプセル化モデルそれが建設
- 私は、データが初期化されるときにコレクション上で実行すると、私の質問は、合成コレクションについてです
ロードされたいくつかのコードに乗ったデータでインスタンス化されるコレクション。私はコレクションの範囲外でこれを行うことができますが、むしろそれをカプセル化したい(そうでなければ、イニシャライザなどで 'クラス'にする点が何であるか)。
私は
initialize()
機能でそのコードを置くことができると思ったが、モデルが投入されました前にそれが実行されますので、私は、コレクション(this.models
が空である)を含むモデルにアクセスすることはできません。私はイベントにバインドできると考えましたが、初期化後にイベントがトリガーされることはありません。彼らは独自のエンドポイントから
fetch
のコレクションを読み込んだ場合には、私はそれをしていません、私は既存のデータからコレクションを初期化しています。
私の質問:それはデータで初期化された直後のコレクション上で実行するコードを初期化するための手順(すなわちthis.models
が空ではありません)。
「外部」コードを必要とせずにこれを行うことは可能ですか?
ここでデモコードがありますが、これはもっとよく説明します。
var Everything = Backbone.Model.extend({
url: "/static/data/mydata.json",
parse: function(data)
{
this.set("things", new Things(data.things, {controller: this}));
}
});
var Thing = Backbone.Model.extend({
});
var Things = Backbone.Collection.extend({
model: Thing,
initialize: function(data, options)
{
// HERE I want access to this.models.
// Unfortunately it has not yet been populated.
console.log("initialize");
console.log(this.models);
// result: []
// And this event never gets triggered either!
this.on("all", function(eventType)
{
console.log("Some kind of event happend!", eventType);
});
}
});
var everything = new Everything();
everything.fetch();
// Some manual poking to prove that the demo code above works:
// Run after everything has happened, to prove collection does get created with data
setTimeout(function(){console.log("outside data", everything.get("things").models);}, 1000);
// This has the expected result, prints a load of models.
// Prove that the event hander works.
setTimeout(function(){console.log("outside trigger", everything.get("things").trigger("change"));}, 1000);
// This triggers the event callback.
私は、コレクションの構築を同期させることを望んでいました(例えば、それは 'Everything.parse'の次の行で使用できます)。明らかに遅らせることはできません。私は、コレクションからロジックを外さなければならないかもしれません。おそらくBackbone.jsへの変更要求... – Joe
'defer'を使うと、webCGMにEventListenerをインストールするのが理想的です。 WebCGMダイアグラムは独立したオブジェクトとしてロードされ、ダムピクチャとしての生活を開始します。イベントの送信を開始するように明示的に指示する必要があります。イベントを送信すると、バックボーンインフラストラクチャにパイプバックできます。私は同じテクニックが他のプラグイン(SVG/PDFなど)とやりとりすることができ、その多くがbroswerでうまくいきませんと思う。 –