2

在我发送到 Google Closure 模板的数据中,我有一个名为default. 我计划使用 Google Closure Compiler 编译 JavaScript 代码和 SoyToJsSrcCompiler 生成的代码。但问题是从模板生成的代码会阻止编译器重命名default属性。

这是模板代码:

/**
 * @param test
 */
{template .template}
    <div>{$test.a.b.default.c.d}</div>
{/template}

这是生成的代码:

/**
 * @param {Object.<string, *>=} opt_data
 * @param {(null|undefined)=} opt_ignored
 * @return {string}
 * @notypecheck
 */
test.template = function(opt_data, opt_ignored) {
  return '<div>' + soy.$$escapeHtml(opt_data.test.a.b['default'].c.d) + '</div>';
};

有什么办法可以得到:

opt_data.test.a.b.default.c.d

而不是:

opt_data.test.a.b['default'].c.d

或任何其他可以让我的财产命名的方式default

现在,编译default器重命名我的 JavaScript 代码中的属性,但不会在 SoyToJsSrcCompiler 生成的代码中重命名它,因为此代码使用引用的版本。

4

2 回答 2

1

default是 JavaScript 中的半保留字。它在switch case语句中使用:

switch ( variable ) {
    case a:
        break;
    case b:
        break;
    default:
        break;
}

它在对象旅行中是完全安全的,但不是作为范围级别的变量:

object.some.thing.else.default;

考虑这个对象树:

var a = {
    b: {
        c: {
            "1": {
                "default": 2
            } 
        }
    }
};

您可以通过以下方式获取值 ( 2):

a.b.c[1].default // 2

但是也:

a["b"]["c"]["1"]["default"] // 2

JSHint 会在非 qoute 需要的情况下引用对象旅行时发出警告。在这种情况下["b"]["c"]["default"]

于 2013-04-17T15:22:26.573 回答
0

目前似乎没有任何支持的方式来做到这一点。我将属性的名称从更改default为可以正确重命名的其他名称。

于 2013-04-17T19:57:18.600 回答