3

我正在尝试在我的应用程序中使用 Tripleflap.js。我的观点是调用函数:

<script type='text/javascript' charset='utf-8'>
    TwitterBird();
</script>

因此,在 application.js 中:

function TwitterBird() {
    var twitterAccount = 'ulmicru';
    var showTweet = false;
    var birdSprite='http://127.0.0.1/birdsprite.png';
    tripleflapInit();
}

然后我尝试运行它,Javascript 调试器告诉我:

Uncaught ReferenceError: birdSprite is not defined 

在 /public/assets/ 的预编译 application.js 中,我正在看这个:

function TwitterBird()
{var e="ulmicru",t=!1,n="http://127.0.0.1/birdsprite.png";tripleflapInit()}

似乎 Rails 预编译器重命名了变量,而 Tripleflap.js 找不到它们。

是否可以禁用资产中的变量重命名?

4

1 回答 1

1

尝试将变量定义移到函数之外,或者只是删除var它们前面的 from,如下所示:

function TwitterBird() {
  twitterAccount = 'ulmicru';
  showTweet = false;
  birdSprite='http://127.0.0.1/birdsprite.png';
  tripleflapInit();
}

我用谷歌搜索了tripleflapInit脚本并查看了它。基本上它直接在窗口上定义了一堆配置变量,并希望你覆盖它们;总而言之,这是一个非常笨拙的脚本,但这不是重点。

因为您是birdSprite在一个函数内部定义var,所以实际上是在该函数的本地定义一个新变量。即使它没有被缩小器重命名,窗口定义的tripleflapInit仍然不会使用它,而是查看窗口上定义的变量。

我不确定您为什么会收到birdSprite未定义的错误,但编译器可能会混淆并删除它,认为它没有被使用。

于 2012-11-25T04:09:56.853 回答