1

我可能误解了 LiveScript 的工作原理,但是我应该如何在 .ls 文件中导入另一个 js 文件并使其编译?例如,我想访问 DOM 文档,例如:

el = document.getElementById 'app'

并加载 mithril.js(在同一个本地目录中):

require! 'mithril.js'

但是当像这样编译时:

lsc -c file.ls

这目前告诉我它找不到“文档”或任何其他秘银特定变量(例如“m”)。

4

2 回答 2

1

如果您将文件编译为 Javascript 并在浏览器中运行它们,那么您不需要 Mithril。

只需确保将其添加到您的脚本之前。

例如:

# file.ls
element = document.get-element-by-id 'example'
m.module element app

然后运行lsc -c file.ls

// file.js
(function() {
  var element = document.getElementById('example');
  m.module(element, app);
}).call(this);

这现在只是一个常规的 JS 文件,其中包含一些对 Mithril 变量的引用。当我们将它们链接到我们的 HTML 时,我们需要记住这一点。

<script src='https://cdnjs.cloudflare.com/ajax/libs/mithril/0.1.34/mithril.js'></script>
<script src='file.js'></script>

重要的是秘银先出现


如果你想要使用 Mithril,以便在浏览器之外使用它,那么你必须稍微重新调整你的 require 语句。

如果您查看Mithril 源代码的第 34 行,您会发现这m只是一个本地函数。然后在第 1066 行,它尝试创建一个全局变量m(如果window存在)。它不会在 Node/IO.js 中执行,因此它会将值附加到module.exports.

这意味着您必须使用返回的值require

m = require 'mithril.js'
m.module! # works!
于 2015-04-20T23:19:37.660 回答
0

找不到document?你不是在浏览器中运行你的代码吗?

require! 'mithril.js'编译为var mithril = require('mithril.js');

你想打电话给秘银m,不是mithril,所以这样做

require! mithril: m或这个m = require 'mithril'

于 2015-04-20T23:08:03.797 回答