Jade in ExecJS上下文

时间:2012-09-21 16:19:56

标签: ruby pug execjs

很简单,我在execjs中从jade-lang文件运行已编译的jade.js时遇到了麻烦。

如果我在一个html文件中包含jade.js

jade.compile

返回一个函数。

当我执行以下操作时:

require 'execjs'

source  = <<-src
  var window = {};
  #{open('jade.js').read}
  var jade = window.jade;
src
context = ExecJS.compile source
context.eval "jade.compile"
 => nil
nval由eval返回。

知道我哪里出错了吗?我已经搜索了堆栈溢出,甚至找到了一些像我一样的方式执行此操作的宝石,但是当我在我的系统上执行时,它不起作用。我尝试使用therubyracer和node作为我的execjs运行时。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

似乎当execjs的返回是一个函数时,它返回nil。所以:

context.eval "jade.compile.toString()"
=> "function....."

Likewile

context.eval "jade.compile(#{template.to_json}).toString()"
=> "function...."

context.eval "jade.compile(#{template.to_json})()"
=> "some html"

这是有道理的,因为execjs/external_runtime.rb的extract_result方法(截至本文撰写时第62行)使用JSON.decode,它不会解码函数。只是对象的衍生物。