10

私の現在のタスクは、特定の DOM 用に一元化されたテンプレートを生成して提供することです。この例では、それがフォームであるとしましょう。

基本的に、各フォーム要素 (ラベルから入力、div ラッパーまで) を取得し、それらを個別のテンプレートとして保存したいと思います。

そこから、プロデューサーがこれらのフォームをつなぎ合わせることができる UI ができあがります。フォームをどのようにレイアウトするかを決定すると (このプロジェクトでは DOM の順序と構造が実際に重要です。CSS のみのソリューションではありません)、プラットフォーム側のスクリプトが JSON オブジェクトを保存し、後でページをロードするときに参照できるテンプレート名に基づく DOM の構造。

ここでの理想的な解決策は、そのJSONオブジェクトをノードサーバーに送信するか、何らかの方法でenvjsを使用してこのdomを「構築」し、それをPHP変数に割り当ててCodeIgniterビューに含めて、インデックスを作成できるようにすることだと考えていますによって。

JQuery が envjs でネイティブに動作することは知っていますし、 node 用の JQuery プラグインがあることも知っていますが、悲しいことに、これは私の最初のサーバー側 JS プロジェクトであり、たまたまかなりメジャーです。コマンド ラインを使用してローカル マシンで envjs を動作させることができましたが、単純なタスクを完了するのに 10 ~ 30 秒かかります。envjs を使用する方法がある場合、バックグラウンドで実行し続け、スクリプトに参照させるにはどうすればよいですか? TomcatのenvjsサーブレットへのPHPカール?

1 つの注意点は、私のローカル dev が WAMP であることです (IT はローカル UNIX マシンを許可しません) が、テスト環境と実稼働環境は両方とも LAMP です。それが絶対に唯一の方法であるかどうかをテストできる個人用のLAMPサーバーがありますが、個人用サーバーで会社のものをコーディングすると、私はいくらか熱くなる可能性があります。

残念ながら、自分の時間に新しいテクノロジを使用する場合のように、すべての可能性を調査し、試行錯誤する時間がありません。アイデア、ガイダンス、コード例 - これにアプローチする方法を決定するのに役立つものは何でも大歓迎です。

4

2 に答える 2

9

簡単な答え: ノードを使用します。今すぐ使用してください。実際、依存関係のないスタンドアロンの最新のネイティブ Windows .exe へのリンクは次のとおりです: http://nodejs.org/dist/v0.5.4/node.exe

長い答え: env.js はクールなプロジェクトです。js で js 環境をシミュレートします。他の環境などで実行できます。どうでもいいけど。

Node.js は、V8 上で実行される js ホスト環境です。V8 は現存する最速の js 環境であり、Chrome などを強化します。ノード自体はネイティブ システム環境用であり、ブラウザにとっての通常の js と同じです: 開発者の使いやすさと機能の幅広さの魔法のように混合された API の強力な組み合わせ設定。

ブラウザーでは、javascript への DOM 拡張を介して、ビデオ、オーディオ、ユーザー入力などを制御できます。サーバー上のノード (または自分のコンピューターだけで、通常のサーバーの使用を超える多くのアプリケーションがあります) を使用すると、すべてのタイプの IO に対する信じられないほどのサポートが得られます。 /O、前述のネットワークおよびファイル I/O を処理するためのマネージド データ ストリーム、スポーンへのアクセス、子プロセスまたはフォーク プロセスとの通信、および V8 のコンパイラへの直接アクセスによる JavaScript バイトコードのコンパイルおよび保存/実行。

DOM に関しては、ノード用の DOM の完全な (html) 実装と複数の部分実装が少なくとも 1 つあります。少なくとも、私が知っている YUI、jQuery、および MooTools は、DOM ライブラリーの上で Node で簡単に実行して、ブラウザーで行うように任意のソースから DOM を構築し、それを html などにシリアル化できます。

https://github.com/tmpvar/jsdomは、ノード (または私が信じている JavaScript 環境) で実行される DOM 実装です。

https://github.com/tmpvar/jsdom/blob/master/example/browser/browser.jsは、ブラウザーをエミュレートする例です。

var sys = require('sys');
var dom = require('../../lib/jsdom/level2/html').dom.level2.html;
var browser = require('../../lib/jsdom/browser/index').windowAugmentation(dom);

var document = browser.document;
var window = browser.window;

var el = document.createElement('div');
el.id = 'foo';
el.innerHTML = '<em>This is a test</em> This <strong class="odd">is another</strong> test ';
document.body.appendChild(el);

sys.puts(document.outerHTML);

決定への道を啓発する可能性のあるその他のライブラリ

于 2011-08-18T20:56:12.983 に答える
7

考慮に値するいくつかのポイント。

EnvjsNodejsの違いは計り知れません。Envjs は、Rhino によってデフォルトで実装されるシミュレートされたブラウザー環境です。Nodejs で Envjs を実装できる (開発者は実装している) ことに注意することが重要です。一方、Nodejs は Google の V8 エンジン用のイベント化された Javascript 環境であり、非常に強力で、利用可能なモジュールがたくさんあります。

あなたが言ったことから、ユーザーのやり取りに基づいてクライアント側でjQuery temlを構築しようとしているように思えます。

<script id="dynamicTemplate" type="text/x-jquery-tmpl">
    {{tmpl "smallTemplate1"}}
    <tr><td>key: ${value}</td></tr>
</script>

次に、 JSONの方法でシリアル化し、サーバーに送信して再現することができます (これは明らかに実行済みです)。逆シリアル化されたテンプレートを実行する方法についてのガイダンスを探しているのは、サーバー側です。

この特定の点で、非常に多くのhttps://github.com/kof/node-jqtplをフォローしているnodejsへのjQuerysテンプレートエンジンのポートであるnode-jqtplモジュールを備えたNodeJSを強くお勧めします

また、能力があれば; テンプレートを JSON に安全にシリアル化する方法を確認したいと思います。これがすべての中で最も難しい部分だと思います。

于 2011-08-14T23:22:19.047 に答える