0

我有一个由 Opal 翻译成 JS 的 Ruby 函数,它一直运行良好,但突然它不再工作了。JS 控制台给了我这个错误信息

Opal.const_get_relative is not a function

原始的 Ruby 代码是这样的

Document.ready? do
  Element.find('#button_id').on :click do

翻译成这个

  return $send(Opal.const_get_relative($nesting, 'Document'), 'ready?', [], (TMP_1 = function(){var self = TMP_1.$$s || this, TMP_2;

  return $send(Opal.const_get_relative($nesting, 'Element').$find("#button_id"), 'on', ["click"], (TMP_2 = function(){var self = TMP_2.$$s || this, TMP_3, postcode_value = nil, blokouderling = nil, content = nil, wijk = nil, naam = nil, email = nil, $writer = nil;

知道出了什么问题吗?

4

1 回答 1

0

将 opal 应用程序编译为 Rails 之外的文件的最简单方法是使用 构建 JavaScript 文件Opal::Builder,这是一个使用 Opal 和 jQuery 的简单示例:

gem 'opal', '~> 0.11.4'
gem 'opal-jquery', '~> 0.4.3'

require 'opal'
require 'opal-jquery'

app_html = <<-HTML
  <html><head>
  <script src="https://code.jquery.com/jquery-3.3.1.js"></script>
  <script src="app.js"></script>
  </head><body></body></html>
HTML

app_code = <<-RUBY
  Document.ready? do
    alert('hello world!')
  end
RUBY

builder = Opal::Builder.new
builder.build('opal')
builder.build('opal-jquery')
builder.build_str app_code, 'app.rb'

File.write 'app.js', builder.to_s
File.write 'app.html', app_html

此时,您只需app.html使用浏览器打开即可看到警报中弹出的“hello world”消息。

于 2018-11-20T21:07:44.460 回答