在Google Closure中使用soyutils的正确方法是什么?

时间:2011-11-10 17:40:42

标签: google-closure-compiler google-closure google-closure-library google-closure-templates

我正在尝试将Google Closure templates (Soy)Google Closure一起使用。

我按照指示包含soyutils_usegoog.js实用程序文件。此文件提供了生成的模板使用的许多实用程序,尤其是soy.StringBuilder。以下是它创建它的方式:

soy.StringBuilder = goog.string.StringBuffer;

soyutils文件上面需要goog.string.StringBuffer几行,但是当在非编译模式下运行时,这会导致运行时错误,因为StringBuffer所在的JS文件在 soyutils执行后。

除非我弄错了,否则Closure中的JS文件不应该立即访问他们'需要'的命名空间。 <script>标记仅在执行当前脚本后添加(在非编译模式下),因此立即使用将导致运行时错误。

简而言之,我如何加载soyutils_usegoog.js而不会因good.string.StringBuffer的早期访问而触发运行时错误。

2 个答案:

答案 0 :(得分:1)

您是否使用已编译的模板作为输入(和soyutils_usegoog.js)重新创建deps.js?然后你goog.require - 你的模板?这样的事情应该有效:

<script src="/closure-library/closure/goog/base.js"></script>
<script src="/closure-library/closure/goog/deps.js"></script><!-- might not need this line if base.js is setup to auto include deps.js -->
<script>
    goog.require('your.template');//this will pull in and execute all the dependencies (including StringBuffer) for your template
</script>
<script>
    alert(your.template());
</script>

答案 1 :(得分:0)