我想在客户端使用Jade模板。最好使用Rails 3.1资产管道生成。我无法弄清楚如何做到这一点。
任何人遇到同样的问题并找到了一个很好的解决方案?任何想法都非常感激。
答案 0 :(得分:31)
如果您使用browserify,则可以使用这个方便的玉器中间件:jadeify。
然后,您可以在将中间件的视图目录指向后面调用jadeify("foo.jade", { x : 4, y : 5 })
浏览器端,然后返回一个jquery句柄。
答案 1 :(得分:7)
P.S:可能现在Substack's answer更好。
也许你可以使用https://github.com/substack/node-browserify
您的节点的浏览器端require() 模块和npm包
只需指向一两个javascript文件即可 浏览器,它会走AST 以递归方式读取所有require()。 生成的包具有一切 你需要,包括拉入 您可能已安装的库 使用npm!
http://jsperf.com/dom-vs-innerhtml-based-templating/53 =>根据这个基准=>表现并不是那么好。 http://gist.github.com/raw/550723/12d176698628e30a1df398c7ac7aea93924e1294/jade.js。但根据TJ,它从来不应该在浏览器中使用,而是在node.js中使用。在那种情况下,它会非常快。您可以在浏览器中使用很多替代方案。
答案 2 :(得分:7)
结帐Blade。它是一个类似Jade的HTML模板引擎,专为客户端(和服务器端)使用而设计。你们可能也喜欢其他一些功能。
编辑:但是,仅适用于Node.js服务器。目前没有Ruby实现。
答案 3 :(得分:5)
此功能现在可在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文件中。
另一种选择是使用templatizer,它会将jade编译为.js文件。
答案 4 :(得分:3)
我写了一个名为tilt-jade的gem来在资产管道中执行此操作。它的工作原理与EJS默认情况下的sprockets一样 - 它将Jade模板渲染为函数,因此它们可以称为客户端。我不确定这是一个很好的解决方案,但它可以满足我的需求。
答案 5 :(得分:2)
Jade现在支持默认为客户端编译;使用-c --client
选项。请参阅http://jade-lang.com/command-line。
答案 6 :(得分:2)
我刚刚建立了一个库,用于在客户端html中提供jade。它就像<一样简单。玉> ...< /玉取代。看看:https://github.com/charlieamer/jade-query
答案 7 :(得分:1)
这是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'));
});
的简单版本。
var template = require('./path_to_compiled_template_file');
var renderedTemplateHtml = template({ aLocal: 'blah blah'});
然后在我的客户端JS文件......
{{1}}
因此,您只需向客户端发送所需的特定模板,并且浏览器确保您只有一个运行时副本。