0

ここでさまざまな Spark 注釈タイプについて読む: https://github.com/meteor/meteor/wiki/Spark

ランドマークとブランチ ラベルを配置する必要がある場所については、まだ混乱しています。2 つの違いは何ですか? また、Handlebars がそれらを呼び出すのはいつですか? 私はBlade テンプレート エンジンの作成者であり、 Blade と Spark を統合しようとしています。

4

1 に答える 1

1

ハンドルバーでは、すべてのテンプレートとすべての{{#constant}} ...{{/constant}}領域がランドマークでラップされます。DOMの領域が事後的に更新されると、DOMの保存、ライフサイクルコールバック(作成/破棄)、およびランドマークのローカル状態を目的として、古いランドマークと新しいランドマークが照合されます。

ランドマークは、ランドマークを含むブランチラベルによって形成される「パス」によって識別されます。(ランドマーク自体はパスに寄与しません。)同じパスを持つ2つのランドマークを持つことは違法です。また、関数の引数の本体からlabelBranchまたはcreateLabelへのラベル付き領域またはランドマーク内に入るHTMLを計算することも重要です。これは、これらの関数を呼び出すときにSparkが実際にDOMと一致しているため、実行する前に「作成済み」(これは新しいランドマークであるため)を呼び出すかどうか(古いものの再レンダリングであるため)を認識しているためです。 HTMLを計算する関数。

ハンドルバーは、いくつかの場所でlabelBranchを呼び出して、区別する必要のあるテンプレート(ランドマーク)の呼び出しを区別します。基本的に、ラベルは、テンプレートの呼び出しにつながった「呼び出しスタック」を決定する必要があります。テンプレートソース({{> someTemplate}})の各テンプレート呼び出しはラベルを取得し、ループもインストルメント化され、問題のオブジェクトの_idまたは存在しない場合は他のヒューリスティックに基づいてループの各反復にラベルを付けます。(Meteorテンプレートにはループ用の2つのコードパスがあることに注意してください。1つはデータベースからの監視可能なカーソル用で、もう1つは通常の配列などの他のすべて用です。)

「foo」テンプレートを数回含むテンプレートからのこのスニペットでは、「foo」の各呼び出し(ループの各反復を含む)は、異なるブランチラベル内で実行されます。

{{> foo}}
{{> foo}}
{{#each collection}}
  {{> foo}}
{{/each}}
{{> foo}}

ヘルパーがテンプレート関数を直接呼び出すとどうなりますか?

var myHelper = function () {
  return Template.foo() + " " + Template.bar();
}

この場合、テンプレートパッケージも各テンプレートを「Template.foo」や「Template.bar」などのラベルでラップするため、日が節約されます(ラベルは安価です)。ただし、ヘルパーが異なる引数を使用して同じテンプレートを複数回呼び出すと、ランドマークの重複の問題が発生します。この場合、曖昧さを解消するために追加のブランチラベルを削除するのはヘルパーの責任です。

テンプレートパッケージ(deftemplate.js内)によって生成されるTemplate.fooの実装では、外側から内側に、ラベル、データ、ランドマーク、イベント、分離のネストされたアノテーションを使用します。この順序はかなり制約されています。たとえば、イベントアノテーションを囲むランドマークは、データの検索に使用されます。分離注釈は意図的に内側にあります。

ハンドルバーとテンプレートパッケージの現在の因数分解は、テンプレートパッケージを追加するのに最適ではない可能性があります。これは私たちにとって新しいフロンティアです。ただし、テンプレート言語を増やすことに非常に興味があり、これに取り組んでいることをうれしく思います。

于 2012-10-17T17:11:18.843 に答える