在使用$ .getScript加载的脚本中未定义CoffeeScript类

Aar*_*nes 2 jquery coffeescript

我正在使用CoffeeScript类和jQuery,并通过ajax加载另一个HTML页面,反过来,它引用另一个javascript,但是在获取ajax加载页面时看到父页面在脚本中加载的类时遇到了问题:

父页面加载一个javascript文件(从CoffeeScript编译):

<script src="/assets/global.js?body=1" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

在CoffeeScript文件中有一个类:

class App
  constructor: ->
    ...
Run Code Online (Sandbox Code Playgroud)

我使用以下方法加载另一个网页:

$.ajax({
  url: '/import/show', 
  success: (data) =>
    $('#content').html(data)
})
Run Code Online (Sandbox Code Playgroud)

该页面反过来引用另一个Coffee/JavaScript文件:

<script src="/assets/import.show.js?body=1" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

当这个加载的javascript文件包含:

alert('test')
Run Code Online (Sandbox Code Playgroud)

警报按预期提出.这表明加载代码正常工作.但是,如果子脚本包含:

app = new App()
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

Uncaught ReferenceError: App is not defined
Run Code Online (Sandbox Code Playgroud)

如果我将代码放在文档就绪函数中,也会发生这种情况:

$(=> a = new App())
Run Code Online (Sandbox Code Playgroud)

有没有人知道我如何在由父页面加载的脚本中使用由通过ajax加载的子页面加载的脚本中的类?

Jam*_*sgt 6

只需将@放在您的班级名称之前.

class @App
Run Code Online (Sandbox Code Playgroud)

这将生成以下内容:

(function() {
    this.App = (function() {
    ...
Run Code Online (Sandbox Code Playgroud)

由于您在窗口为此时定义了类,因此它将是全局可访问的.