我想在客户端使用 Jade 模板。最好使用 Rails 3.1 资产管道生成。我真的不知道该怎么做。
有谁偶然发现了同样的问题并找到了一个很好的解决方案?任何想法都非常感谢。
我想在客户端使用 Jade 模板。最好使用 Rails 3.1 资产管道生成。我真的不知道该怎么做。
有谁偶然发现了同样的问题并找到了一个很好的解决方案?任何想法都非常感谢。
如果你使用browserify,你可以使用这个方便的jade中间件:jadeify。然后你可以jadeify("foo.jade", { x : 4, y : 5 })
在中间件指向一个视图目录后调用浏览器端,然后你会得到一个 jquery 句柄。
PS:可能现在Substack的答案更好。
也许你可以使用https://github.com/substack/node-browserify
您的节点模块和 npm 包的浏览器端 require()
只需在 browserify 上指向一个或两个 javascript 文件,它就会遍历 AST 以递归方式读取您的所有 require()。生成的包包含您需要的一切,包括拉入您可能使用 npm 安装的库!
http://jsperf.com/dom-vs-innerhtml-based-template/53 => 根据这个基准,性能不是很好 => http://gist.github.com/raw/550723/12d176698628e30a1df398c7ac7aea93924e1294/玉.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 文件包含在带有 script 标签的 html 文件中。
另一种选择是使用templatizer,它会为您将 jam 编译为 .js 文件。
我编写了一个名为tilt-jade的 gem来在资产管道中执行此操作。默认情况下,它的工作方式与 EJS 对 sprocket 的工作方式完全相同 - 它将 Jade 模板呈现为函数,因此它们可以被称为客户端。我不确定这是一个很好的解决方案,但它可以满足我的需求。
Jade 现在默认支持为客户端编译;使用该-c --client
选项。请参阅http://jade-lang.com/command-line。
我刚刚制作了一个库,用于在客户端 html 中提供 Jade。就像<jade>...</jade>一样简单。看看:https ://github.com/charlieamer/jade-query
这是一个 hacky 但简单的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 确保您只有一份运行时副本。