无法评估和使用通过 getsctipt(或 xhr'ed 和评估)从客户端调用的 Opal 文件

Opal file called from client via getsctipt (or xhr'ed and evaled) can't be evaled and used

我想 xhr 一些蛋白石脚本,并使用那里定义的 ruby 代码。我试图用 $.getScript 得到它。但对我来说没有成功。

$.ajax({
  url: 'assets/foo.js.rb',
  success: function(data){
    #{ClassInFooJs.new}
  },
  dataType: "script"
});

此外脚本被评估(以奇怪的方式),我的意思是我可以从控制台调用 Opal.modules["file_i_required"],它会 return 基本上编译代码。

但是里面没有任何东西被评估,(没有 console.logs,window["foos"] = #{something}),我不能从那个文件中引用任何东西。

有什么帮助吗?

您应该使用 Opal 的 require "foo" 或 JavaScript 的 Opal.require("foo")。如果需要 load "foo" 行为,应注意 Opal.load("foo") 也存在。

另一种方法是在服务器上编译文件,将 :requirable 标志设置为 false,但这有点困难,除非您手动编译。有关详细信息,请参阅 API docs

应避免直接调用 Opal.modules["foo"](Opal),因为它不会正确更新 $LOADED_FEATURES,并且通常将来可能会发生变化。