4

アップデート:

このスクリプトは、私が探している触媒のようです。それをテストし、そうであればこの質問に回答/クローズします。


最終的にこれに対する答えが見つかると確信していますが、他の誰かがすぐにそれを知っている場合に備えて、今そこに出しています...

RaphaelJS を使用して DOM を操作しています (SVG識別された に一連のタグを追加します)。MongoDBDIVコレクションに更新がある場合は、それらの特定の DOM 部分を再レンダリングしたいと考えています。

例として: - というコレクションがあるとしましょうPiePieces。-ページが最初にレンダリング/呼び出されるとき、コレクション内のピースの数が 4 であると仮定しましょう。 -コンソールを使用して、プログラムでパイのピースを追加しPiePieces.insert({...}) ます。しかし問題は、新しいエントリが直接 DOM 操作を実行する Raphael スクリプトを通過する必要があることです。

したがって、ロジックは次のようになります。

MongoDB コレクションの更新イベント -> DOM を操作するためのクライアント関数呼び出し -> DOM の変更/更新なしでのページの更新。

DOM 自体から値を読み取ることでこれを実装しようとしましたが、更新された DOM を取得できますが、ページ全体が更新されるか、ページを手動で更新する必要があるか、または DOM ツリーがまだ完成していないなどです。更新するまで空白です。

おそらく小さなコードスニペット/例で、私を正しい方向に向けることができますか? (似たようなものが既に存在する場合は、場所を教えてください。掘り下げます)

前もって感謝します!(私は今のところメテオが大好きです...)

4

2 に答える 2

4

たぶん、 observeメソッドが必要です。「MongoDB コレクション更新イベント」と呼ばれるものにコールバックを割り当て、その後、Raphaël などを使用する DOM 操作関数を呼び出すことができます。

次のようになります。

PiePieces.find().observe({
    changed: function(piePiece) {
        //call DOM manipulating function
    }
})

これにより、コールバックがすべての PiePieces にアタッチされます。コールバックをすべてのドキュメントにアタッチしたくない場合は、観察の前に検索で必要なドキュメントをクエリします。

于 2012-11-26T17:02:09.237 に答える
0

次のように、テンプレート内から draw メソッドを参照できます。

template.html

<template name="drawing">
  {{#each PiePieces}}
     {{draw piece}} <!-- assuming 'piece' is a property on 'PiePiece' -->
  {{/each}}
</template>

client.js

Template.drawing.PiePieces = function(){
  PiePieces.find();
}

Template.drawing.draw = function(piece){
  // your drawing method here
}
于 2012-04-23T17:47:25.473 に答える