Passing MVC Modell Daten an Client-seitige Typoskript-Code

stimmen
11

Wenn MVC verwenden, manchmal I die Modelldaten zu der Client-Seite des Servers JavaScript vorbei Rasiermesser in die JavaScript injizierten wie folgt verwendet:

<script type=text/javascript>
    var myClientGuid = '@Model.MyServerGuid';
</script>

Dies stellt einen JavaScript - Variable mit dem Namen myClientGuidauf den Wert der Eigenschaft serverseitige Modells MyServerGuid. Wenn es den Client erreicht, sieht der Code so etwas wie dies im Browser:

<script type=text/javascript>
    var myClientGuid = 'EF0077AB-0482-4D91-90A7-75285F01CA6F';
</script>

Dies ermöglicht externe JavaScript-Dateien diese Variable zu verwenden.

Meine Frage ist, in Typoskript, da alle Code muss über externe Dateien referenziert werden, was ist der beste Weg , serverseitige Felder passieren Code Typoskript? Externe Code - Dateien können nicht Razor - Code enthalten. Soll ich die gleiche Technik verwenden , wie oben in der Ansicht, Mischen JavaScript und Typoskript im Rahmen des Projektes?

Veröffentlicht am 09/10/2012 um 19:13
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
17

Der Typoskript Compiler muss nur wissen, dass Ihr serverseitige Felder vorhanden sind. Der einfachste Weg, dies zu tun, ist Umgebungs Erklärungen zu verwenden (§ 10 der Spezifikation sehen). wenn Sie eine Datei .ts haben zum Beispiel, die verwenden myClientGuid benötigt, könnten Sie tun,

declare var myClientGuid: string;

an der Spitze der Haupt .ts-Datei. Der Compiler wird nicht Code für diese var Deklaration erzeugen, so dass Sie nicht alles verprügeln. Jetzt alle Dateien, die Referenz, die .ts-Datei wird wissen, dass es eine myClientGuid Zeichenfolge in globalem Bereich zur Verfügung steht.

Beantwortet am 09/10/2012 um 19:19
quelle vom benutzer

stimmen
2

Eine weitere Lösung (auf globale Variablen zu vermeiden) ist das Typoskript Code in einer Funktion zu wickeln, die die benötigten serverseitigen Felder als Parameter verwendet:

In Typoskript-Datei:

function setupMyPage(myGuid:string) {
   ...
}

In .cshtml:

<script src='@Url.Content("<path-to-typescript>")'></script>
<script>
    setupMyPage('@Model.MyServerGuid');
</script>

Wenn Sie RequireJS verwenden, können Sie auch die Export - setupMyPageFunktion als Modul, das Hinzufügen der Funktion zum globalen Namensraum zu vermeiden:

In Typoskript-Datei:

export = setupMyPage;

In .cshtml:

<script>
    require(['@Url.Content("<path-to-typescript>")'], function(setupMyPage) {
        setupMyPage('@Model.MyServerGuid');
    };
</script>
Beantwortet am 08/08/2014 um 12:24
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more