Aquí hay una respuesta más directa a su pregunta.
En el segundo ejemplo, se está refiriendo a una función que tiene que ser en el ámbito global (es decir, una propiedad del objeto window
).
En el primer ejemplo, se refiere a una propiedad del modelo de vista actual.
Sí, es una distinción sutil, pero es importante. Si usa atributos en el evento, solo puede referirse a cosas que existen en el alcance global. Esto significa que tiene que poner todo lo que desea acceder en el ámbito global, lo que conduce a un código muy desordenado.
Si usa enlaces declarativos, el significado exacto de los enlaces depende del contexto.
Ayuda a pensar en el marcado HTML como una coincidencia. Lo que realmente está mirando es el acceso estructurado al modelo de vista. Piense en with
y forEach
como contextos anidados y de los otros enlaces como sus atributos. La relación entre los enlaces declarativos y el HTML subyacente de repente parece más como trabajar con XSLT.
Los dos ejemplos parecen muy similares. Pero los conceptos subyacentes son muy diferentes y hacen que los datos sean tan potentes y los atributos en el evento sean tan desagradables.
La razón por la que los atributos de evento están mal visto no es solo que combinan la lógica con la estructura. Es que son un intento débil de atornillar código JavaScript arbitrario a elementos HTML que impide la encapsulación adecuada de la lógica de la aplicación.Los atributos en el evento son "ganchos" de bajo nivel, los enlaces amplían el comportamiento de los elementos.
Dicho todo esto, es posible hacer las mismas cosas horribles que las personas han hecho con los atributos en el evento mediante el uso de enlaces declarativos. La diferencia está en qué más puedes hacer con ellos. No siempre debes juzgar las tecnologías por cómo se puede abusar de ellas: todos somos adultos aquí.
Siempre he creído que debería intentar no tener más de un idioma en un solo archivo. normalmente establezco una identificación o clase y le enlace la función una vez que la página ha terminado de construirse. – dqhendricks
Parece que el problema aquí es menos acerca de MVVM y más acerca de los pros/contras de JavaScript discreto: http://en.wikipedia.org/wiki/Unobtrusive_JavaScript – Craig
@ Craig Tener ese enlace de datos en el marcado no aparece en el espíritu de js discreto, así que no estoy seguro de que de eso se trata. – heisenberg