2

我是 PhoneGap/CoffeeScript 的新手,试图让一个 Hello World 应用程序在 iOS 中运行,我想知道我做错了什么。

这将是我的标准 index.html:

<!DOCTYPE html>
<html>
  <head>
  <title></title>

    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" />
  <meta charset="utf-8">


  <script type="text/javascript" charset="utf-8" src="cordova-1.6.0.js"></script>
  <script type="text/javascript" charset="utf-8" src="app.js"></script>

  </head>
  <body onload="onBodyLoad()">
  <h1>Hey, it's Cordova!</h1>
  <p>Don't know how to get started? Check out our <em><a target="_blank" href="http://docs.phonegap.com/en/edge/guide_getting-started_ios_index.md.html#Getting%20Started%20with%20iOS">Getting Started Guide</a></em>

  </body>
</html>

从 app.coffee 生成的 app.js 看起来像这样:

(function() {
    var onBodyLoad, onDeviceReady;

    onBodyLoad = function() {
        return document.addEventListener("deviceready", onDeviceReady, false);
    };

    onDeviceReady = function() {
        return navigator.notification.alert("This alert never happens!");
    };

}).call(this);

当我删除 app.js 的第一行“ (function() { ”和最后一行“ }).call(this); ”时,会收到警报,一切正常。但我想有一个比每次 CoffeeScript 编译成 JavaScript 时都删除这些行更好的方法。

非常感谢,雅各布

4

2 回答 2

3

Coffeescript 将每个文件包装在一个函数中,以防止它污染全局命名空间。如果您真的想这样做,您可以更改onBodyLoadto的声明window.onBodyLoad,但最佳实践明确反对将 ​​Javascript 调用放在 HTML 元素中,例如onload.

这是一个流行问题的变体。是一个示例,说明如何使用事件侦听器在页面加载时不显眼地调用您的函数。

于 2012-05-12T22:02:32.780 回答
1

CoffeeScript 提供了一个禁用包装的bare选项。-b

于 2013-01-16T17:03:30.193 回答