Passen MVC Model Gegevens ter Client-side typoscript Code

stemmen
11

Bij gebruik MVC passeer ik soms server modelgegevens de client-side JavaScript met Razor geïnjecteerd in de JavaScript als volgt:

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

Dit stelt een JavaScript-variabele met de naam myClientGuidvan de waarde van de server-side model woning MyServerGuid. Als het de klant bereikt, wordt de code ziet er ongeveer als volgt uit in de browser:

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

Dit maakt het mogelijk externe JavaScript-bestanden om deze variabele te gebruiken.

Mijn vraag is, schrijfmachine, omdat alle code moet worden verwezen via externe bestanden, wat is de beste manier om de server-side velden door te geven aan de code typoscript? Externe code bestanden kunnen Razor code bevatten. Moet ik gebruik maken van dezelfde techniek als hierboven, in de View, JavaScript en Typescript mengen binnen het project?

De vraag is gesteld op 09/10/2012 om 19:13
bron van user
In andere talen...                            


2 antwoorden

stemmen
17

De Typescript compiler hoeft alleen maar te weten dat uw server-side velden bestaan. De eenvoudigste manier om dat te doen is tot omgevingstemperatuur verklaringen (zie punt 10 van de specificatie) gebruikt. Bijvoorbeeld, als u een Ts bestand dat nodig is om myClientGuid gebruik had, zou u kunnen doen

declare var myClientGuid: string;

aan de bovenkant van uw belangrijkste .TS bestand. De compiler zal geen code voor dit var verklaring te genereren, zodat je niets afranselen. Nu alle bestanden die verwijzen naar die Ts bestand zal weten dat er een myClientGuid een string verkrijgbaar in de mondiale scope.

antwoordde op 09/10/2012 om 19:19
bron van user

stemmen
2

Een andere oplossing (globale variabelen voorkomen) is de schrijfmachine code verpakken in een functie die de benodigde server-side velden als parameters is nu:

In dit logbestand:

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

In .cshtml:

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

Als u gebruik maakt RequireJS, kunt u ook het exporteren setupMyPagefunctie als een module, om te voorkomen dat het toevoegen van de functie om de wereldwijde namespace:

In dit logbestand:

export = setupMyPage;

In .cshtml:

<script>
    require(['@Url.Content("<path-to-typescript>")'], function(setupMyPage) {
        setupMyPage('@Model.MyServerGuid');
    };
</script>
antwoordde op 08/08/2014 om 12:24
bron van user

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