Pasando MVC modelo de datos para el lado del cliente Código mecanografiado

votos
11

Cuando se utiliza MVC, a veces me paso los datos del modelo del servidor para el JavaScript del lado cliente mediante el uso de la maquinilla de afeitar se inyecta en el código JavaScript, de la siguiente manera:

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

Esto establece una variable de JavaScript llamado myClientGuidal valor de la propiedad del modelo del lado del servidor MyServerGuid. Cuando se llega al cliente, el código es como la siguiente en el navegador:

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

Esto permite que los archivos JavaScript externos que utilizan esta variable.

Mi pregunta es, por escrito, ya que todo código debe ser referenciada a través de archivos externos, ¿cuál es la mejor manera de pasar los campos del lado del servidor para mecanografiado código? Archivos de código externos no pueden contener código de afeitar. ¿Debo utilizar la misma técnica que la anterior, en la vista, la mezcla de JavaScript y de imprenta, dentro del proyecto?

Publicado el 09/10/2012 a las 19:13
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
17

El compilador mecanografiado sólo necesita saber que existen los campos del lado del servidor. La forma más sencilla de hacerlo es utilizar declaraciones ambientales (véase la sección 10 de la especificación). Por ejemplo, si usted tenía un archivo ts que necesitaba usar myClientGuid, que podría hacer

declare var myClientGuid: string;

en la parte superior de su archivo principal Ts. El compilador no generará código para esta declaración var, por lo que no va a darle una paliza nada. Ahora todos los archivos que hacen referencia a que Ts archivo sabrá que hay una cadena myClientGuid disponibles en el ámbito global.

Respondida el 09/10/2012 a las 19:19
fuente por usuario

votos
2

Otra solución (para evitar las variables globales) es envolver el código de transcripción en una función que toma los campos del lado del servidor necesarios como parámetros:

En fichero de transcripción:

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

En .cshtml:

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

Si está utilizando RequireJS, también puede exportar la setupMyPagefunción como un módulo, para evitar la adición de la función de espacio de nombres global:

En fichero de transcripción:

export = setupMyPage;

En .cshtml:

<script>
    require(['@Url.Content("<path-to-typescript>")'], function(setupMyPage) {
        setupMyPage('@Model.MyServerGuid');
    };
</script>
Respondida el 08/08/2014 a las 12:24
fuente por usuario

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