クライアント側でJadeテンプレートを使用したいのですが。Rails3.1アセットパイプラインを使用して生成することが望ましい。私はこれを行う方法を本当に理解することはできません。
同じ問題に遭遇し、素晴らしい解決策を見つけた人はいますか?どんな考えでも大歓迎です。
クライアント側でJadeテンプレートを使用したいのですが。Rails3.1アセットパイプラインを使用して生成することが望ましい。私はこれを行う方法を本当に理解することはできません。
同じ問題に遭遇し、素晴らしい解決策を見つけた人はいますか?どんな考えでも大歓迎です。
browserifyを使用する場合は、この便利なjadeミドルウェアjadeifyを使用できます。jadeify("foo.jade", { x : 4, y : 5 })
次に、ミドルウェアでビューディレクトリを指定した後、ブラウザ側を呼び出すだけで、jqueryハンドルを取得できます。
PS:おそらく今のところサブスタックの答えの方が良いでしょう。
たぶんあなたはhttps://github.com/substack/node-browserifyを使うことができます
ノードモジュールとnpmパッケージのブラウザ側require()
javascriptファイルを1つか2つbrowserifyに向けるだけで、ASTがすべてのrequire()を再帰的に読み取るようになります。結果として得られるバンドルには、npmを使用してインストールした可能性のあるライブラリを取り込むなど、必要なものがすべて含まれています。
http://jsperf.com/dom-vs-innerhtml-based-templating/53= >このベンチマークによるとパフォーマンスはそれほど良くありません=> http://gist.github.com/raw/550723/12d176698628e30a1df398c7ac7aea93924e1294/ jade.js。 _ しかし、TJによると、ブラウザで使用されることは想定されていませんでしたが、代わりにnode.jsが使用されました。その場合、それはかなり速くなるでしょう。代わりにブラウザで使用できる選択肢はたくさんあります。
チェックアウトブレード。これは、クライアント側(およびサーバー側)で使用するために設計されたJadeのようなHTMLテンプレートエンジンです。あなたたちが好きかもしれない他のいくつかの機能もあります。
編集:ただし、Node.jsサーバーの場合のみ。現時点では、Rubyの実装はありません。
この機能はJadeで利用できるようになりました。 http://jade-lang.com/api/
APIドキュメントから:
var jade = require('jade');
// Compile jade file to a function
var fn = jade.compileClient('string of jade', options);
// Later in client site, render the function to HTML
var html = fn(locals);
コンパイルされたjavascript関数をクライアントに渡す必要があります。たとえば、関数(例ではfn)を.jsファイルに書き込んでから、スクリプトタグを使用して.jsファイルをhtmlファイルに含めます。
もう1つのオプションは、jadeを.jsファイルにコンパイルするtemplatizerを使用することです。
アセットパイプライン内でこれを行うために、tilt-jadeと呼ばれるgemを作成しました。これは、EJSがデフォルトでスプロケットを使用する場合とまったく同じように機能するように作られています。Jadeテンプレートを関数にレンダリングして、クライアント側で呼び出すことができるようにします。それが優れた解決策かどうかはわかりませんが、私のニーズには問題なく機能しました。
Jadeは、デフォルトでクライアントのコンパイルをサポートするようになりました。オプションを使用し-c --client
ます。http://jade-lang.com/command-lineを参照してください。
翡翠をクライアント側のhtmlで利用できるようにするためのライブラリを作成しました。<jade> ...</jade>と同じくらい簡単です。それをチェックしてください:https ://github.com/charlieamer/jade-query
browserify
これは、を使用するためのハッキーですがシンプルなバージョンですgulp-jade
。
var jade = require('gulp-jade'),
replace = require('gulp-replace');
gulp.task('jade-client', function() {
gulp.src('./views/**/*.jade')
.pipe(jade({
client: true
}))
.pipe(replace(/function template/g, 'var jade = require("gulp-jade/node_modules/jade/lib/runtime");\n\nmodule.exports = function'))
.pipe(gulp.dest('./client/templates'));
});
次に、クライアント側のJSファイルで...
var template = require('./path_to_compiled_template_file');
var renderedTemplateHtml = template({ aLocal: 'blah blah'});
したがって、必要な特定のテンプレートのみをクライアントに送信し、browserifyはランタイムのコピーが1つしかないことを確認します。