2

在我的 Google Closure 代码中,我创建了一个枚举来表示 CSS 类的名称,并希望在我的大豆模板中使用这个枚举:

/**
 * Lists a single widget.
 * @param widget The widget to be listed.
 */
{template .singleWidgetListing}
<div class='{app.ui.ClassNames.WIDGET_LISTING}'>
  <span class='{app.ui.ClassNames.WIDGET_LISTING_ITEM}'>{$widget.title}</span>
</div>
{/template}

我尝试goog.require('app.ui.ClassNames');在大豆模板文件的顶部无济于事。执行此操作的标准方法是什么?

4

2 回答 2

2

推荐的方法是避免在闭包模板中引用全局变量:

注意:除非绝对必要,否则避免使用渲染时全局变量,因为它会导致模板和运行时环境之间的紧密耦合。

应改为使用模板参数:

{namespace myapp}

/**
 * Lists a single widget.
 * @param widget The widget to be listed.
 * @param classNames Map of CSS classes for styling widgets.
 */
{template .singleWidgetListing}
  <div class="{$classNames.WIDGET_LISTING}">
    <span class="{$classNames.WIDGET_LISTING_ITEM}">{$widget.title}</span>
  </div>
{/template}

然后将从 JavaScript 调用模板,如下所示:

myapp.singleWidgetListing(
    {widget: myWidgetInstance, classNames: app.ui.ClassNames});

请参阅在 JavaScript 中使用闭包模板

于 2012-07-22T20:53:30.797 回答
0

还可以考虑将 CSS 类的映射作为注入数据 ( https://developers.google.com/closure/templates/docs/concepts#injecteddata )传递到您的顶级模板中,这样您就不必通过它到需要它的子模板。

于 2013-08-25T21:42:14.887 回答