Как интегрировать директиву печати шаблона закрытия Google (Soy)

Я хотел бы знать, как интегрировать подключаемый модуль печати Google Closure Template, также известный как Soy, шаг за шагом, если сможете, в основном потому, что я довольно плохо разбираюсь в Java. Ниже на странице объясняется, как это сделать, но мне нужно более подробно.

https://developers.google.com/closure/templates/docs/plugins

  • Это нормально, что директива печати просто используется как `{myprintformat $var}'.
  • (Дополнительный вопрос) Как вы думаете, мы можем скомпилировать оператор `goog.require('xxx')' в javascript? Если бы это было возможно, мы могли бы предоставить функции и потребовать их от soy.js.

Любая помощь приветствуется.


person Soichi Takamura    schedule 11.02.2013    source источник


Ответы (1)


Вам нужно взглянуть на исходный код Clojure, чтобы увидеть, как он создает свои собственные директивы. Это довольно легко.

Во-первых, вам нужно понять, как реализовать директиву. Для этого см. пример. Загрузите исходный код шаблонов clojure и изучите :

./java/tests/com/google/template/soy/basicdirectives/TruncateDirective.java

Затем вам нужно немного разобраться в Google Guice. Создайте модуль Guice, чтобы добавить свои директивы:

public class MySoyModule extends AbstractModule {

    @Override
    protected void configure() {        
        Multibinder<SoyPrintDirective> soyDirectivesSetBinder = Multibinder.newSetBinder(binder(), SoyPrintDirective.class);        
        soyDirectivesSetBinder.addBinding().to(DateDirective.class);
    }

}

Затем создайте экземпляр своего конструктора с помощью инжектора Guice, например:

Injector injector = Guice.createInjector(new SoyModule(), new MySoyModule());
SoyFileSet.Builder sfsBuilder = injector.getInstance(SoyFileSet.Builder.class);
SoyFileSet sfs = sfsBuilder.add(SoyUtils.class.getResource(source)).build();

Теперь вы можете вызывать свои шаблоны:

SoyTofu simpleTofu = sfs.compileToTofu().forNamespace("soy.examples.simple");

Вот и все.

person feroult    schedule 02.01.2014
comment
Спасибо, feroult, это очень хорошее описание для меня, я попробую еще раз позже. Спасибо! - person Soichi Takamura; 24.01.2014