クライアント側のエンジニアと一致するその優れた抽象化は、DOMの構築と変更の方法を引き受けます。その点では、メンタルモデルが1つあるため、「よりクリーン」です。また、口ひげなどの「最も愚かな」テンプレートシステムの場合のように、他の点ではクリーンな宣言型マークアップの上に、テンプレート言語からの異種の構文の塊を混ぜる必要がないので、それも素晴らしいです。
テンプレート作成にjsdomを使用する方が効率的だとは言えません。たとえば、「jsdomでのメモリリーク」をグーグルで見てみましょう。jsdomはradであり、サイトをクロールする週末のプロジェクトや、サーバーに関連しないタスクの実行などのタスクに非常に役立ちますが、高性能Webサーバーの観点からは遅いと思います。
これを因数分解する方法は10億あります。「標準的な」方法として登場した方法はありません。私が見た1つの方法は、空の「テンプレート」、つまり何らかの方法でモデルを表すhtmlのブロックを送信し、それを使用してモデルからエンドビューを構築するブートストラップを行うことです。その記事から、例えば:
<li class="contact" id="contact-template">
<span class="name"></span>
<p class="title"></p>
</li>
これは、古典的な点での「ビュー」です。一般的なWebアプリケーションでは、次のようになります。
<li class="contact">
<span class="name"><?= $name ?></span>
<p class="title"><?= $title ?></p>
</li>
mvcを使用するには、上記のビューのセマンティクスとそれが表すモデルを漠然と認識しているコントローラーをセットアップします。このビューはDOMに解析され、お気に入りのセレクターエンジンを介してアクセスされます。これが変更を表すモデルごとに、変更イベントまたはコールバックを使用してビューを更新できます。例えば:
プロパティが変更されるたびに「model」が「change」イベントを発生させると想像してみましょう。
controller = new Controller({
view: $('#contact-template').clone(), // Assume jquery or whatever
model: aContact
});
// Assume some initialization that sets the view up for the first time
// and appends it to the appropriate place. A la:
// this.view.find('.name').text(model.name);
// this.view.find('.title').text(model.title);
// this.view.appendTo('#contacts')
controller.on('model.name.change', function(name){
this.view.find('.name').text(name);
});
これらは、WeldやBackbone.jsのようなシステムがあなたのために行うことです。それらはすべて、この作業が行われている場所(サーバー側、クライアント側)、使用しているフレームワーク(jquery、mootoolsなど)、および変更がどのように配布されているか(REST、ソケット)についてさまざまな程度の仮定を持っています。 ioなど)。
編集
jsdomで実行できるいくつかの本当に便利なことは、統合テストとスパイダリングを中心に展開します。
個人的には、tobiのアプローチを採用したプロジェクトを見たいのですが、https://github.com/LearnBoost/sodaのようなものの上にマッピングして、セレンなしでクラウドベースのセレンテストを実行できるようにします(imo以降、吸う)。