JsRender を実行するためにジュラシック スクリプト エンジンを使用して、C# で記述されたクラス ライブラリから JsRender テンプレートをプリコンパイルしようとしています。
これが私のコードです:
var engine = new Jurassic.ScriptEngine();
engine.Execute(JsRenderContents);
var precompiledTemplate = engine.CallGlobalFunction<string>(String.Concat("$.templates(\"", template, "\");"));
このページ$.templates()
からJavaScript 関数呼び出し を取得しました。
$.templates(markupOrSelector) の戻り値: コンパイルされたテンプレート オブジェクト
そして、私のサンプル HTML テンプレートは単純です
<li>{{:Name}}</li>
ただし、私のコードでは例外が発生します。
'$.templates("<li>{{:Name}}</li>");' is not a function.
ここで、jQuery が存在しなくても $ 演算子を使用できるかどうかは 100% 明確ではありません。著者は、いくつかの例に jQuery を含めていますが、jQuery は必須ではないとも述べています。
それで、何がうまくいかないのですか?この質問を投稿した同じ日に GitHub から取得した JsRender のバージョンのドキュメントは古くなっていますか? (JsRender がまだベータ版であることは承知しています。) それとも、ジュラシックを誤用しているのでしょうか?
編集:
これは実際には JsRender の質問というよりジュラ紀の質問だと思います。具体的には、これは Jurassic のグローバル オブジェクトに関連していると思います。JsRender は を渡す即時呼び出し関数にラップされておりthis
、Jurassic が提供するかどうかはわかりませんthis
。
この質問に直面したのは私が初めてではないようです。このページの最後の投稿からアドバイスを受けて、コードを次のように変更しました。
var engine = new Jurassic.ScriptEngine();
engine.Execute(JsRenderContents);
engine.Global["window"] = engine.Global;
var precompiledTemplate = engine.CallGlobalFunction<string>(String.Concat("window.jsviews.templates(\"", template, "\");"));
これはうまくいきませんでした - おそらく JsRender の IIF がthis
代わりに渡さwindow
れ、スクリプトを変更したくないためです。
誰でもこれを前進させるのを助けることができますか? ジュラシックを考えると、ジュラシックからJsRender関数を呼び出すにはどうすればよいですか...わかりません...おそらく、ジュラシックがグローバルオブジェクトを実装する方法にいくつかの概念的な違いがあります。