Вот что я делаю в mustache.java:
import java.util.Collection;
import java.util.Map;
import java.util.Set;
public class UrlHelper implements Map<String, String> {
public static final UrlHelper instance = new UrlHelper();
private static final String NORMAL_PREFIX = "url";
private final String virtualHost;
// configure virtualhost here
private UrlHelper() {
virtualHost = "/";
}
public boolean containsKey(Object key) {
return key.toString().indexOf(':') != -1;
}
public String get(Object key) {
String k = key.toString();
String prefix = k.substring(0, k.indexOf(':'));
String url = k.substring(k.indexOf(":") + 1);
if (prefix.equals(NORMAL_PREFIX))
return virtualHost + url;
return virtualHost + "static/" + prefix + "/" + url + "." + prefix;
}
// Default implementation for the other 'Map' methods
}
При рендеринге делаю так:
mustache.execute(writer,new Object[] { model, UrlHelper.instance }).flush();
Вы можете использовать это так (предположим, что ваше приложение размещено в /app):
{{js:lib/jquery}} {{! /app/static/js/lib/jquery.js }}
{{css:site}} {{! /app/static/css/site.css }}
{{url:users/edit/1}} {{! /app/users/edit/1 }}
Также возможно иметь один префикс для всех статических ресурсов (например, статический), но вы не можете использовать точки для указания расширения файла, поэтому вы должны использовать какой-либо другой символ для представления точек и замены в вашем коде обработки.
Вы, вероятно, можете адаптировать эту технику к вашей веб-инфраструктуре/языку.
person
Thiago de Arruda
schedule
01.06.2012