2009-07-06 15 views
13

Quiero que el código JavaScript se separe de las vistas.
que tiene la obligación de aplicar la localización de un botón simple imagen generada por JavaScript:¿Cómo manejar la localización en archivos JavaScript?

<img src="..." onclick="..." title="Close" /> 

¿Cuál es la mejor técnica para localizar el título de la misma?

PD: Encontré a solution de Ayende. Esta es la dirección correcta.

Editar:
Obtuve clase de ayuda de localización que proporciona el método de extensión Controller.Resource('foo').

Estoy pensando en extenderlo (helper) para que pueda devolver todos los recursos de JavaScript (desde la subcarpeta "ClientSideResources" en App_LocalResources) para el controlador especificado por su nombre. A continuación, llámelo en BaseController, agréguelo al ViewData y repáselo en Layout.

¿Sería una buena idea?

Respuesta

9

EDITAR

que no escribe los recursos localizados necesarias para un objeto de JavaScript (hash) y luego usarlo para la búsqueda de los objetos creados de forma dinámica. Creo que esto es mejor que volver al servidor para las traducciones. Esto es similar a agregarlo a través de viewdata, pero puede ser un poco más flexible. FWIW, podría considerar los recursos de localización como parte de la Vista, no como parte del controlador.

En la Vista:

<script type="text/javascript" 
     src='<%= Url.Content("~/Resources/Load?translate=Close,Open" %>'></script> 

lo que seria algo así como:

var local = {}; 
local.Close = "Close"; 
local.Open = "Open"; 

Sin argumentos Sería salida de todo el hash de la traducción. El uso de argumentos le da la posibilidad de personalizarlo por vista.

A continuación, utilizarlo en sus archivos JavaScript como:

$(function(){ 
    $('#button').click(function() { 
     $("<img src=... title='" + local.Close + "' />") 
      .appendTo("#someDiv") 
      .click(function() { ... }); 
    }); 
}); 

En realidad, no soy muy exigente en cuanto a mantener mi código JavaScript de mis puntos de vista, siempre y cuando el código JavaScript se localiza en un contenedor . Normalmente estableceré mi página maestra con 4 áreas de contenido: título, encabezado, principal y scripts. El título, el encabezado y el principal van donde usted esperaría y el área de scripts va en la parte inferior del cuerpo.

Puse todos mis JavaScript incluidos, incluidos los de viewusercontrols, en el contenedor de scripts. El código JavaScript específico de la vista viene después de los includes. Refactorizo ​​el código compartido a los scripts según sea necesario. He pensado en usar un método de control para clasificar secuencias de comandos, es decir, incluir varias secuencias de comandos con una única solicitud, pero todavía no he llegado a eso.

Esto tiene la ventaja de mantener el código JavaScript separado para facilitar la lectura, pero también me permite insertar fácilmente el modelo o ver los datos en el código JavaScript según sea necesario.

+0

"Quiero javascript para separarse de puntos de vista." == "También es una buena práctica mantener tu javascript separado de tu marca". <= y ese es el problema por el cual <%= foo %> no funcionará. –

+0

Por cierto, ¿por qué es preferible adjuntar el controlador onclick en la carga de JS? –

+0

Me perdí la parte "generada por JS" de su pregunta, simplemente escaneada justo encima. En este caso, consideraría escribir los datos localizados en la vista y hacer que javascript los cargue desde un objeto local. Reescribirá – tvanfosson

1

Si insiste en manteniéndolo separado, se podría hacer algo como:

//keep all of your localised vars somewhere 
var title = '{title_from_server}'; 
document.getElementById('someImage').title = title; 

Recuerde, si se utiliza el código JavaScript para inicializar cualquier texto de elementos, su sitio se degradará horrible donde JavaScript no está disponible .

+0

Maldición ... Olvidé de nuevo sobre la posible falta de soporte de JavaScript. :( –

Cuestiones relacionadas