无法评估和使用通过 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
,并且通常将来可能会发生变化。
我想 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
,并且通常将来可能会发生变化。