禁用Rails中的Javascript变量重命名

时间:2012-11-24 22:34:30

标签: javascript ruby-on-rails assets

我正在尝试在我的应用中使用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无法找到它们。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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