Sie können Anwendungsvorlage nicht einfach ändern. Ember hört nicht auf templateName
Eigenschaft ändert sich und reagiert schlecht, wenn Sie versuchen, die Vorlage selbst zu rendern.
Eine gute Möglichkeit wäre, unterschiedliche Teiltöne innerhalb Ihrer Anwendungsvorlage zu verwenden, je nachdem, ob Sie sich im "Bildschirm" - oder "Druck" -Modus befinden.
<script type="text/x-handlebars">
{{#if isPrint}}
{{partial "application-print"}}
{{else}}
{{partial "application-normal"}}
{{/if}}
</script>
<script type="text/x-handlebars" data-template-name="application-normal">
<div id="app-normal">
<h2>Normal template</h2>
{{outlet}}
</div>
</script>
<script type="text/x-handlebars" data-template-name="application-print">
<div id="app-print">
<h2>Print template</h2>
{{outlet}}
</div>
</script>
App.ApplicationController = Ember.Controller.extend({
isPrint: false,
currentPathChange: function() {
var currentPath = this.get("currentPath");
var isPrint = currentPath ? currentPath.indexOf("print") === 0 : false;
this.set("isPrint", isPrint);
}.observes('currentPath').on("init")
});
This JSBin wird zeigen, warum dies leider auch nicht funktioniert. Nach this bug report, Embers Lenker wird verwirrt, wenn mehrere outlet
Direktiven auf der gleichen Seite, auch wenn sie in verschiedenen #if
Bereichen sind.
Bis dies behoben wird, schlage ich die folgende, leicht modifizierte Lösung vor.
Anwendungsvorlage ist leer. Jeweils eine Vorlage für Normal- und Druckbereich.
<script type="text/x-handlebars">
{{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="normal">
<div id="app-normal">
<h2>Normal template</h2>
{{outlet}}
</div>
</script>
<script type="text/x-handlebars" data-template-name="print">
<div id="app-print">
<h2>Print template</h2>
{{outlet}}
</div>
</script>
Im Router geht alles in Normal- und Druckressourcen. Normale Ressourcen werden an/platziert, so dass alle Links gleich bleiben. Keine Notwendigkeit für spezielle Codierung in ApplicationController.
App.Router.map(function() {
this.resource("print", function() {
this.route("a");
this.route("b");
});
this.resource("normal", {path: "/"}, function() {
this.route("a");
this.route("b");
});
});
Arbeiten jsbin here.
Danke für die Antwort @ panta82 ... Das bedeutet, ich muss meine Routen zu print.route1 und normal.route2 richtig ändern? – Melvin
Sie haben bereits 'print' Ressource. Sie müssen nur die anderen Routen so ändern, dass sie sich innerhalb der "Bildschirm" - oder "normalen" Ressource befinden (oder wie immer Sie sie nennen wollen). Im obigen Beispiel wären das "Dashboard" - und "Alles" -Routen. – panta82
Danke Mann .. Prost! – Melvin