4

私は、サーバー上で拡張された Jquery Mobile マークアップを構築し (実行中Coldfusion8)、DustJS (Javascript テンプレート エンジン) を使用してマークアップを js 文字列にプリコンパイルするというアイデアに自分自身を売り込もうとしています。静的ファイル。

Coldfusion にプラグインを追加しようとしているだけだと思います。これが私がやりたいことです:

Coldfusion で次のようなテンプレートから始めます。

<cfsavecontent variable="renderedResults">
    <cfoutput>
        {##person}{root}: {name}, {age}{/person}
    </cfoutput> 
</cfsavecontent>

NodeJS でDustJSコンパイラを介してこれを実行すると、次のような結果が返されます。

 (function() {
      dust.register("demo", body_0);

 function body_0(chk, ctx) {
     return chk.section(ctx.get("person"), ctx, {
       "block": body_1
      }, null);
   }
   function body_1(chk, ctx) {
     return chk.reference(ctx.get("root"), ctx, "h").write(": ").reference(ctx.get("name"), ctx, "h").write(", ").reference(ctx.get("age"), ctx, "h");
   }
   return body_0;
 })();

として保存しsomeStaticTemplate.jsます。このファイルはクライアントに取り込まれ、動的データで埋められます。

私の問題は、これを Coldfusion でコンパイルすることです。

CfgroovyサーバーでJavascriptを実行するために使用しています:

 <cfimport prefix="g" taglib="../../tags/cfgroovy/" />
     35k zipped plugin here
     <!--- COMPILE  --->
     var dustedTemplate = dust.compile( variables.tempLateToCompile, variables.templateName);
     <!--- OUT --->
     variables.put("renderedResult", dustedTemplate);
 </g:script>

ただし、このようにすると、次のエラーが返されます。

type: sun.org.mozilla.javascript.internal.JavaScriptException 
message: [object Error] (<Unknown Source>#1)

だから私は何か間違ったことをしているに違いない...

質問:

このサーバー側をJSにコンパイルすることはまったく可能ですか? もしそうなら、プラグインを含める方法を考えてください。この投稿も見ましたが、すでにできることを伸ばしているので、上記で試しているようにうまくいくことを願っています。

いくつかの入力をありがとう!

BOUNTY :
わかりました、私は自分自身を試すことをあきらめます。
報奨金の時間... a) CFGrooy タグまたは別の javascript 有効化設定で DustJS プラグインをロードすることを可能にする Coldfusion コード スニペットを探しています
b) DustJS Javascript-compile 関数を実行して、テンプレートを

  {##person}{root}: {name}, {age}{/person}

これに:

  (function() {
      dust.register("demo", body_0);

 function body_0(chk, ctx) {
     return chk.section(ctx.get("person"), ctx, {
       "block": body_1
      }, null);
   }
   function body_1(chk, ctx) {
     return chk.reference(ctx.get("root"), ctx, "h").write(": ").reference(ctx.get("name"), ctx, "h").write(", ").reference(ctx.get("age"), ctx, "h");
   }
   return body_0;
 })();

それが技術的に不可能な場合は、サーバー上に HTML ベースのテンプレートを作成し、クライアントに動的データを追加できるようにプレースホルダーを含む代替アプローチを受け入れます。

ありがとう!

4