goog.string переопределяется, когда я использую soyutils.js - PullRequest
1 голос
/ 15 ноября 2011

goog.string не может использоваться, когда soyutils.js включен в тот же HTML-файл.

, потому что в soyutils.js есть свой собственныйgoog.string, которая полностью переопределяет goog.string <- goog.require ('goog.string'). </p>


<!DOCTYPE html>
<html>
<head>
    <title>codeBox</title>
    <script src="{{STATIC_URL}}closure-library/closure/goog/base.js"></script>
    <script>

    goog.require('goog.string');

    </script>

    <script src="{{STATIC_URL}}soyutils.js"></script>
</head>
<body>
    <script>
    console.log(goog.string.trim);

    </script>
</body>

(игнорировать {{STATIC_URL}}, то естьдля сервера Django)

console.log (goog.string.trim) покажет вам «undefined».

Это потому, что goog.string переопределяется goog.string, расположенным в soyutils.js.

как я могу обойти эту проблему без компиляции? (когда я компилирую все файлы .. тогда она работает хорошо)

Ответы [ 2 ]

3 голосов
/ 16 ноября 2011

вместо

<script src="{{STATIC_URL}}soyutils.js"></script>

использование

<script src="{{STATIC_URL}}soyutils_usegoog.js"></script>

Вы можете найти soyutils_usegoog.js в том же каталоге, что и soyutils.js в архиве шаблонов закрытия.

Проблема возникает из-за того, что существует две версии соютилов.

  1. soyutils.js - версия для незакрытых пользователей, включающая в себя достаточно закрытия, чтобы заставить работать JavaScript из SoyToJSCompiler.
  2. soyutils_usegoog.js - это версия, которая работает с библиотекой закрытия и компилятором закрытия. Он не должен конфликтовать с библиотекой закрытия.

Использование шаблона закрытия JavaScript Объясняет:

Код JavaScript, сгенерированный компилятором шаблонов, зависит от ряда утилит.

Включите один из этих двух служебных файлов, в зависимости от того, используете ли вы уже библиотеку Closure:

  • JavaScript / soyutils.js
  • JavaScript / soyutils_usegoog.js

Эти файлы включены в tar-архив, который можно загрузить со страницы загрузок Closure Templates.

Если ваш проект уже использует библиотеку Closure, используйте soyutils_usegoog.js, который намного меньше, чем soyutils.js.

0 голосов
/ 25 сентября 2013

Также просто хотите добавить ответ к ответу выше, если вы используете библиотеку Google Closure, то вам может потребоваться добавить

base.js

затем

goog.require('goog.string.StringBuffer');
goog.require('goog.soy.data');

затем

soyutils_usegoog.js

...