【发布时间】:2013-05-15 20:37:46
【问题描述】:
我现在在 Drupal 项目中使用Google Closure Compiler。我的 Javascript 是使用 Javascript Module Pattern 构建的。
由于 Drupal 的工作方式,我单独编译每个 JS 文件。简单编译模式效果很好,但我想在每个文件上使用Advanced Compilation。
我的文件都是关于
var FOO = (function(me, $, Drupal, undefined) {
function init (context, settings) {
do_sutff();
};
Drupal.behaviors['FOO'] = {
attach: init
};
return me;
}(FOO || {}, jQuery, Drupal));
我的问题是 Drupal.behaviors 是 Drupal 中的特定对象,而 attach 属性也是特定属性。当一个 Drupal 页面呈现时,Drupal.behaviors 被循环通过,并且所有的 attach 函数都使用正确的参数调用。换句话说,我不想用 Drupal 对象重命名任何东西。
当我使用高级编译模式时,我得到
var c = function(a, d, b) {
b.b.FOO = {a:function() {
do_stuff()
}};
return a
}(c || {}, jQuery, Drupal);
我尝试了许多变体,试图让编译器将整个 Drupal 对象识别为外部对象,但没有运气。不管我怎么尝试,.behaviors 和 .attach 总是被重命名。
有没有办法告诉编译器不要碰整个对象?
【问题讨论】:
-
我得到 b.behaviors.FOO={attach:function(){}}; ...
-
@dandavis 我通过 SIMPLE_OPTIMIZATIONS 得到了这一点。当我使用 ADVANCED_OPTIMIZATIONS 时,
Drupal对象会被处理,如编辑所示。 -
var o=Drupal['behaviors']['FOO']; o['attach']=init;
标签: javascript drupal google-closure-compiler