Google closure compiler 使用闭包编译器时如何保留jQuery.ajax.data对象?
将闭包编译器与高级_优化一起使用时,jQuery.ajax.data对象会发生更改:Google closure compiler 使用闭包编译器时如何保留jQuery.ajax.data对象?,google-closure-compiler,Google Closure Compiler,将闭包编译器与高级_优化一起使用时,jQuery.ajax.data对象会发生更改: $.ajax({ type: "POST", url: "ajax.php", data: { act : "some" }, success : function(data){} }); 数据对象被转换为{L:“some”} 我可以使用引号,比如'act':“some”,但我希望它在没有引号的情况下工作。 在我的externs文件中有: /**@type{Object.}*/
$.ajax({
type: "POST",
url: "ajax.php",
data: {
act : "some"
},
success : function(data){}
});
数据对象被转换为{L:“some”}
我可以使用引号,比如'act':“some”
,但我希望它在没有引号的情况下工作。
在我的externs文件中有:
/**@type{Object.}*/
jQuery.ajax.data代码>
但这不起作用。Closure编译器版本1043尝试使用类似以下内容的外部代码:
var jQuery = {};
jQuery.ajax = {
data: ''
}
这不会重命名“jQuery.ajax”和“jQuery.ajax.data”您需要引号来告诉Closure不要损坏属性名。这是一项要求。没有引号,无法使其工作。外部文件也不正确jQuery.ajax.data
表示jQuery.ajax
下的data
属性。jQuery.ajax
(这是一个函数)下没有data
属性data
是作为参数传递给jQuery.ajax
的对象的属性。您“外部化”了错误的东西。但是,如果您这样做:var foo={};foo.act=null
在外部文件中,Closure将不再重命名所有对象上的任何名为“act”的属性(或任何名为“foo”的变量,您不关心),包括传递给“data”属性的对象哈希中的属性。但是,请注意,所有名为“act”的属性都不会被重命名,即使是在您希望它们重命名的时候!同样的问题,同样的答案