0

很简单,我无法在 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

eval 返回 nil。

知道我哪里出错了吗?我搜索了堆栈溢出,甚至发现了一些与我相同的方式执行此操作的 gem,但是当我在我的系统上执行时,它不起作用。我尝试使用 therubyracer 和 node 作为我的 execjs 运行时。

谢谢你的帮助!

4

1 回答 1

0

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

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

同样

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,它不会解码函数。只是对象的衍生物。

于 2012-09-21T17:27:11.873 回答