ist, was ich in mustache.java tun:
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
}
Beim Rendern ich dies tun:
mustache.execute(writer,new Object[] { model, UrlHelper.instance }).flush();
Sie können wie folgt verwenden (unter der Annahme Ihrer App bei/app gehostet wird):
{{js:lib/jquery}} {{! /app/static/js/lib/jquery.js }}
{{css:site}} {{! /app/static/css/site.css }}
{{url:users/edit/1}} {{! /app/users/edit/1 }}
Es ist auch möglich, einen einzelnen Präfix für alle statischen Ressourcen zu haben (zB: statisch), aber Sie können keine Punkte verwenden, um spe cify die Dateierweiterung, also müssen Sie ein anderes Zeichen verwenden, um Punkte darzustellen und in Ihrem Bearbeitungscode zu ersetzen.
Sie können diese Technik wahrscheinlich an Ihr Web-Framework/Ihre Sprache anpassen.
+1 Genau das. Schnurrbart zwingt Sie, alles zu behalten, was Sie in der Ansicht "falsch machen" könnten. Dies macht es viel einfacher zu testen, und, wie Gwendal sagte, ermöglicht es Ihnen, Ihre Vorlagen in jeder Sprache zu rendern (z. B. das Rendering auf clientseitiges JavaScript für Browser, die es unterstützen). –