sintax rails index escape comment ruby-on-rails haml microdata

ruby on rails - rails - Microdatos: ¿Cómo usar con plantillas/parciales?



href haml (2)

Creo que tienes razón al dudar de poner el div-business en el parcial, porque no pertenece semánticamente allí y estás en problemas en caso de que quieras renderizar el video en otro lugar sin el div.

Así que aquí es lo que yo propondría:

  1. Podrías pensar en envolver el objeto de video (supongo que es una especie de modelo) en un decorador y convertir el div-business allí.

  2. Incluso podrías hacer un microdata-div-parcial genérico, que probablemente se comporte como:

%div [ your-item-type ] { itemprop: propvar, itemscope: true, itemtype: typevar } render item

Esto es probablemente sintácticamente horrible, lo siento.

  1. Luego, simplemente puede representar el div en un método de decoración y ser independiente de cómo se reproduce su video en su propio parcial.

Entonces es básicamente: [Controlador]

@video.decorate

-> [Ver]:

@video.render_with_micro

-> [Decorador]: reproduce microdatos-div-parciales con @video como elemento y los itemprops, itemtypes dados -> Itemprops, Itemtypes se mantienen dentro del decorador (que es donde pertenecen a la OMI, son información de representación).

Espero que mi braindump ayude, Saludos!

TL; DR: Los microdatos te obligan a usar itemprop en el mismo elemento que el tipo de elemento que es este valor de itemprops. ¿Cómo lidias con esto, si quieres dividir tu plantilla en parciales? El elemento solo puede aparecer en uno de los dos lugares, ya sea en la plantilla que contiene o en el parcial incluido, ambos de los cuales realmente no funcionan bien.

Estoy usando Rails con haml, pero supongo que mi pregunta se aplica a cualquier motor de plantillas, donde puede dividir su plantilla en parciales más pequeños. Estoy haciendo uso de parciales, eso significa que mis plantillas generalmente no tienen más de 10 líneas de código. Pero encajar los microdatos en estos parece demasiado complicado, entonces, ¿cómo se supone que se usen adecuadamente los microdatos con parciales?

Tomemos este ejemplo:

#app/views/article/show.html.haml %p Hey, Welcome! Read This wonderful article: = render @article #app/views/articles/_article.html.haml %div[ article ] %h1= @article.title %p= @article.description %div= render @article.video #app/views/videos/_video.html.haml %div[ video ] %h2= video.file_name %video{ src: video.url }

Y ahora con microdatos:

#app/views/articles/_article.html.haml %div[ article ]{ itemscope: true, itemtype: ''http://schema.org/Article'' } %h1{ itemprop: ''name'' }= @article.title %p{ itemprop: ''description'' }= @article.description %div{ itemprop: ''video'' }= render @article.video

¿Y entonces que? Tengo que agregar el tipo de elemento VideoObject en el mismo div, que tiene itemprop: ''video'' porque, así es como funcionan los microdatos. Asi que:

#app/views/articles/_article.html.haml %div{ itemprop: ''video'', itemscope: true, itemtype: ''http://schema.org/VideoObject'' }= render @article.video

Pero entonces no puedo usar ese mismo tipo de artículo nuevamente en el video parcial. Esto ahora sería inválido:

#app/views/videos/_video.html.haml %div[ video, itemscope: true, itemtype: ''http://schema.org/VideoObject'' ]

Pero el itemtype pertenece al video. No quiero repetirlo en cada elemento contenedor. Quiero poder usar el video parcial en cualquier otro lugar y aún tenerlo declarado como un video con microdatos. Así que todo tiene que salir del artículo parcial y al parcial vido como este:

#app/views/articles/_article.html.haml %div= render @article.video #app/views/videos/_video.html.haml %div[ video ]{ itemprop: ''video'', itemscope: true, itemtype: ''http://schema.org/VideoObject'' }

De nuevo, itemprop tiene que estar en el mismo elemento que el tipo de elemento de video. Pero, ¿por qué debería el video cuidado parcial / saber cómo se llama a itemprop que tiene el valor de?

La única solución que tengo, es pasar el itemprop al parcial. Esto también significa que tenemos que declarar un valor predeterminado itemprop en caso de que no se pase ninguno. Así que terminamos con esto:

#app/views/articles/_article.html.haml %div= render @article.video, itemprop: ''video'' #app/views/videos/_video.html.haml itemprop ||= nil %div[ video ]{ itemprop: itemprop, itemscope: true, itemtype: ''http://schema.org/VideoObject'' }

Eso parece demasiado complicado. También me resulta bastante confuso pasar el nombre de itemprop al parcial, por lo que el parcial sabe cómo se llama el valor de itemprop. ¿Qué tan raro es eso? En ningún otro lugar de la programación he encontrado objetos que necesitaban saber el nombre de la cosa que los señala.

Entonces, ¿hay una manera mejor establecida para hacer esto? ¿O es así como es y no debería ser tan llorón al respecto? ☺


Tuve que leerlo un par de veces para obtener la esencia de la pregunta. Y una buena pregunta es!

TL; DR: Sí, te estás quejando un poco, ¡pero con toda la razón! Use Decoradores o Células para que se vea mejor, pero desafortunadamente siempre habrá una forma en que los dos ámbitos interactúen y el ámbito principal influya en el incrustado.

Lectura más larga: al analizar su problema, parece que se basa principalmente en un problema que también es común en otras áreas de la programación y ha generado mucha discusión y reclamos dentro de la informática (consulte los ámbitos de JavaScript, por ejemplo). Estoy hablando del alcance de los objetos. En este caso, estamos hablando de la definición del alcance de dos elementos donde uno tiene que comportarse de manera diferente cuando está incrustado en un elemento padre.

En un nivel práctico de su problema; tienes razón en que el parcial debe tener la responsabilidad de proporcionar itemscope y itemtype al objeto. Esto tiene más sentido para mí desde la perspectiva de un objeto y es consistente con el elemento de nivel superior del artículo. Me acercaría a eso como la forma de verlo. Es lo más consistente que podrías obtener en este caso.

Para una solución de proporcionar itemprop en ese elemento cuando está incrustado; La solución es si lo más lógico es pasarlo desde el lugar donde se procesa. Estoy de acuerdo en que esto no parece "a la manera del rubí", por lo que sugeriría que echen un vistazo a los decorators o a las cells . Ambos pueden ayudarte a limpiar mucho tus vistas / parciales. Como parece que estás en el enfoque parcial, las celdas pueden ofrecerte una capa adicional de controladores dentro de una vista. Muy útil a veces.

Me gusta la sugerencia de @jfornoff de que cree una solución más genérica que también pueda usar para otros elementos que no sean solo videos. También existen soluciones para microformatos . Tanto el ayudante de microformatos como el esquema Html parecen intentarlo y ayudarlo a hacerlo de esa manera, aunque parece que ambos necesitan nuevas contribuciones.