基本的な meteor アプリケーションで予期しない動作が見られ、コメントを求める設計パターンの質問につながります。
meteor アプリには、外部ソースからグラフ ノードとエッジのリストを読み取り、ノードを Nodes コレクションに挿入し、エッジを Edges コレクションに挿入し、特別なドキュメントを 3 番目の Signal コレクションに挿入するサーバーがあります。クライアントは、変更を検出するために、3 つのコレクションすべてに「追加:」オブザーバーを持っています。
信号コマンドを描画する前に、すべてのノードとリンクがクライアントに表示されることを期待していました。代わりに、ノードとエッジの約 1/3 がクライアントのシグナル コマンドの後に追加されています。
すべてのデータが揃うまでグラフの描画を避けたいので、Signal コレクションを使用します。Meteorでこれを行うより良い方法はありますか? 使用すべき別のデザインパターンはありますか? これはよくある質問のようです。
// server side inserts
_.each(model.nodes, function(r) {
Nodes.insert({ name: r.name });
});
_.each(model.edges, function(r) {
Edges.insert({ source: r.src, target: r.tgt, value: r.value });
});
Signal.remove({});
Signal.insert({command: "draw-graph"});
// client side observer
Template.template_mission_impact.rendered = function () {
var graph = new myGraph(...);
Nodes.find().observe({
added: function (doc) {
graph.addNode(doc._id, doc.name);
}
});
Edges.find().observe({
added: function (doc) {
graph.addEdge(doc._id, doc.source, doc.target, doc.value);
}
});
Signal.find().observe({
added: function (doc) {
if (doc.command === "draw-graph") {
graph.draw();
}
}
});
};