2015-10-19 35 views
1

tl; dr

有没有像其他任何JavaScript模板引擎(例如Mustache,Handlebars或Nunjucks)一样的将Jade完全用于客户端的方法,以便通过ajax加载包括?无节点使用Jade模板的简单方法?

更多信息:

我有没有在节点上运行(不幸的是,由于各厂商不提供节点库还),我真的开始喜欢的语法和玉的能力的Web应用程序。不幸的是,似乎Jade中的所有内容都需要某些节点,无论是在开发流程中还是在服务器端。我绝对不能在服务器端使用它,并且不希望将其引入到仅用于模板的开发周期中。

看起来好像所有这些都需要打包依赖关系(这可以通过browserify完成)并实现fs以使用ajax读取文件。这是否已经有一些实现?

此外,每个文件,每个会话编译一次所花费的时间对于此应用程序来说并不是真正的问题。

+0

还有其他的方法来编译玉比节点。查看[Jade github页面](https://github.com/jadejs/jade)的底部,查看其他语言的实现列表。其中一个应该适用于你的服务器。 – Nuclearman

回答

2

我居然找到了这样做的方式,完全在客户端:

  1. 使用browserify CDN获取节点包客户端捆绑。
  2. 的“FS”模块中捆绑实行“readFileSync”功能使用同步的XmlHttpRequest并从服务器检索文件(这是目前空的,所以没有函数存在)

中提琴!

UPDATE:

这是我实现:

2:[function(require,module,exports){ 
module.exports = { 
cache: { }, 
readFileSync: function(path){ 
    return this.cache[path] || (this.cache[path] = (function(){ 
    var request = new XMLHttpRequest(); 
    request.open('GET', path + '?_=' + $.time(), false); 
    request.send(); 
    if (request.status === 200) { 
     return request.responseText; 
    } 
    else { 
     throw 'Unable to load template: ' + path; 
    } 
    }).call()); 
} 
}},{}] 
+0

你介意分享你的实施吗? –

+1

我添加围绕线423玉1.11.0源文件中的以下内容: '2:[功能(需要,模块,出口){ \t module.exports = { 缓存:{}, \t \t readFileSync:函数(路径){ return this.cache [path] || (this.cache [path] =(function(){var {request} = new XMLHttpRequest(); request.open('GET',path +'?_ ='+ $ .time(),false); request 。发送(); 如果(request.status === 200){ 回报request.responseText; } 其他{ 扔 '无法加载模板:' +路径; }。 })()调用) ; \t \t} \t} },{}]' – jrb