使用Jade模板(jade-lang.com)客户端

时间:2011-07-04 20:19:33

标签: javascript ruby-on-rails node.js template-engine pug

我想在客户端使用Jade模板。最好使用Rails 3.1资产管道生成。我无法弄清楚如何做到这一点。

任何人遇到同样的问题并找到了一个很好的解决方案?任何想法都非常感激。

8 个答案:

答案 0 :(得分:31)

如果您使用browserify,则可以使用这个方便的玉器中间件:jadeify。 然后,您可以在将中间件的视图目录指向后面调用jadeify("foo.jade", { x : 4, y : 5 })浏览器端,然后返回一个jquery句柄。

答案 1 :(得分:7)

P.S:可能现在Substack's answer更好。


browserify

也许你可以使用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}}

因此,您只需向客户端发送所需的特定模板,并且浏览器确保您只有一个运行时副本。