Předávání MVC datový model na straně klienta strojopisem zákoníku

hlasů
11

Při použití MVC, někdy projdu modelových dat na server na straně klienta JavaScript pomocí Razor vstřikuje do JavaScriptu, a to následovně:

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

Tato položka nastavuje proměnnou jazyka JavaScript s názvem myClientGuidk hodnotě nemovitosti server-side modelu MyServerGuid. Když dosáhne klienta, kód vypadá nějak takto uvnitř prohlížeče:

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

To umožňuje externí soubory JavaScriptu používat tuto proměnnou.

Moje otázka je, na psacím stroji, protože všechny kód musí být uvedeno pomocí externích souborů, jaký je nejlepší způsob, jak předat straně serveru pole strojopisem kód? Externí soubory kód nemůže obsahovat Razor kód. Mám použít stejnou techniku jako výše, z pohledu, míchání JavaScript a psacím stroji v rámci projektu?

Položena 09/10/2012 v 19:13
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
17

Strojopisu kompilátor prostě potřebuje vědět, že na straně serveru pole existují. Nejjednodušší způsob, jak to udělat, je použít okolní prohlášení (viz § 10 spec). Například, pokud jste měli .TS soubor, který potřebuje používat myClientGuid, jsi to mohl udělat

declare var myClientGuid: string;

V horní části hlavního souboru Ts. Kompilátor nevygeneruje kód pro toto prohlášení var, takže nebudete nic nandat. Nyní všechny soubory, které odkazují, že Ts soubor bude vědět, že je k dispozici v globálním měřítku myClientGuid řetězec.

Odpovězeno 09/10/2012 v 19:19
zdroj uživatelem

hlasů
2

Dalším řešením (aby se zabránilo globální proměnné) je zabalit strojopisu kód funkce, která bere potřebné na straně serveru pole jako parametry:

Strojopisem souboru:

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

V .cshtml:

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

Pokud používáte RequireJS, můžete také exportovat setupMyPagefunkci jako modul, aby nedošlo k přidání funkce ke globálnímu namespace:

Strojopisem souboru:

export = setupMyPage;

V .cshtml:

<script>
    require(['@Url.Content("<path-to-typescript>")'], function(setupMyPage) {
        setupMyPage('@Model.MyServerGuid');
    };
</script>
Odpovězeno 08/08/2014 v 12:24
zdroj uživatelem

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