Passerer MVC modell data til klientsiden Loggfila kode

stemmer
11

Ved bruk av MVC, og noen ganger passere serverens modelldata til kundesiden, Javascript ved anvendelse av Razor injisert i Javascript, som følger:

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

Dette setter en Javascript-variabel kalt myClientGuidtil verdien av server-side-modell eiendom MyServerGuid. Når den når kunden, ser koden noe sånt som dette i nettleseren:

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

Dette gjør at Javascript-filer eksterne å bruke denne variabelen.

Mitt spørsmål er, i maskinskrevet manuskript, siden all kode må være referert via eksterne filer, hva er den beste måten å passere server-side felt for å typescript koden? Eksterne koden filer kan ikke inneholde Razor kode. Bør jeg bruke samme teknikk som ovenfor, i View, blande Javascript og typescript i prosjektet?

Publisert på 09/10/2012 klokken 18:13
kilden bruker
På andre språk...                            


2 svar

stemmer
17

Loggfila kompilatoren trenger bare å vite at din server-side felt eksisterer. Den enkleste måten å gjøre det på er å bruke omgivende erklæringer (se avsnitt 10 av spesifikasjonen). For eksempel, hvis du hadde en ts fil som trengs for å bruke myClientGuid, kan du gjøre

declare var myClientGuid: string;

på toppen av hoved Ts fil. Kompilatoren vil ikke generere koden for denne Var erklæring, så du vil ikke clobber noe. Nå filer som refererer til at ts filen vil vite at det er en myClientGuid streng tilgjengelig i globalt omfang.

Svarte 09/10/2012 kl. 18:19
kilden bruker

stemmer
3

En annen løsning (for å unngå globale variable) er å vikle den maskinskrevet manuskript koden i en funksjon som tar de nødvendige server-side-felter som parametere:

I loggfila:

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

I .cshtml:

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

Hvis du bruker RequireJS, kan du også eksportere setupMyPagefungere som en modul, for å unngå å legge funksjonen til globale navne:

I loggfila:

export = setupMyPage;

I .cshtml:

<script>
    require(['@Url.Content("<path-to-typescript>")'], function(setupMyPage) {
        setupMyPage('@Model.MyServerGuid');
    };
</script>
Svarte 08/08/2014 kl. 11:24
kilden bruker

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