Trecerea MVC model de date pentru client-side Cod typescript

voturi
11

Când se utilizează MVC, am uneori trec datele modelului serverului pentru client-side JavaScript folosind aparat de ras injectat în JavaScript, după cum urmează:

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

Aceasta stabilește o variabilă JavaScript numit myClientGuidla valoarea modelului de server-side proprietate MyServerGuid. Când ajunge la client, codul arata ceva de genul asta in interiorul browser - ului:

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

Acest lucru permite fișiere externe JavaScript pentru a utiliza această variabilă.

Întrebarea mea este, dactilografiat, din moment ce toate cod trebuie să fie referit prin fișiere externe, ceea ce este cel mai bun mod de a trece câmpurile server-side la masina de scris cod? Fișierele cod externe nu pot conține codul de aparat de ras. Ar trebui să folosesc aceeași tehnică ca mai sus, în modul, amestecare JavaScript și typescript în cadrul proiectului?

Întrebat 09/10/2012 la 19:13
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
17

Compilatorul typescript doar trebuie să știe că există câmpurile server-side. Cel mai simplu mod de a face acest lucru este de a utiliza declarații ambientale (a se vedea secțiunea 10 din spec). De exemplu, dacă ați avut un fișier de care este nevoie pentru a TS utiliza myClientGuid, ai putea face

declare var myClientGuid: string;

în partea de sus a fișierului dvs. principal TS. Compilatorul nu va genera codul pentru această declarație var, astfel încât să nu lovească nimic. Acum, orice fișiere care referință acel fișier va ști că TS există un șir de caractere myClientGuid disponibil în domeniul global.

Publicat 09/10/2012 la 19:19
sursa de către utilizator

voturi
2

O altă soluție (pentru a evita variabile globale) este să-și încheie codul typescript într-o funcție care ia nevoie de câmpurile server-side ca parametri:

În fișierul script:

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

În .cshtml:

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

Dacă utilizați RequireJS, puteți exporta , de asemenea, setupMyPagefuncția ca un modul, pentru a evita adăugarea funcției de la spațiul de nume la nivel mondial:

În fișierul script:

export = setupMyPage;

În .cshtml:

<script>
    require(['@Url.Content("<path-to-typescript>")'], function(setupMyPage) {
        setupMyPage('@Model.MyServerGuid');
    };
</script>
Publicat 08/08/2014 la 12:24
sursa de către utilizator

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