Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как получить доступ к структурированным метаданным с помощью DocPad?

Автор вопроса: Nic GibsonОтветов: 2

В данный момент я оцениваю DocPad, чтобы посмотреть, подойдет ли он, среди прочего, для нашего веб-сайта. У меня возникли проблемы с тем, как использовать структурированные метаданные в эко-шаблонах. Я почти уверен, что это связано с Как отобразить вложенный атрибут Backbone с помощью Eco ? но это тоже без ответа.

Моя страница выглядит так:

--- yaml
layout: 'post'
title: "Samuel Johnson's garret - an unexpected lull"
category: 'Digital Publishing'
author:
    name: Author Name
    page: author
    email: [email protected]
---


Unexpected free time, a chilly walk, a brown plaque leads me to
[Dr Johnson's house (http://www.drjohnsonshouse.org/) near Fleet-Street...

и эко-шаблон вроде:

---
layout: default
---

<article id="post" class="post">
    <h1><%= @document.title %></h1>
    <h2>By: <%= @document.author.email %></h2>
    <div class="post-content"><%- @content %></div>
</article>

@document.author.email приводит к регистрации следующей ошибки:

TypeError: Cannot read property 'email' of undefined

Как получить доступ к этим структурированным метаданным?

спасибо

metadatadocpad

Ответы

Ответ 1 · рейтинг 2 · Dharma

Кажется, все в порядке. Когда я тестирую ту же структуру, строка <%= @document.author.email %> работает. Может быть, у вас есть какая-то несогласованность с использованием пробелов и вкладок? Вы можете проверить свой YAML на этом сайте: http://yamllint.com.

Лично я также использую массивы объектов в метаданных:

choices:
  -
    text: "Mercure"
    feedback: "Mercure est la planète la plus proche du Soleil, elle se situe à une distance de 0,4 UA"
    value: 0

  -
    text: "Neptune"
    feedback: "C'est effectivement la planète la plus éloignée avec une distance de 30 UA."
    value: 1

и это прекрасно работает. Извините за текст на французском языке, но я думаю, что это не имеет большого значения для примера.

Ответ 2 · Francisco Javier Arenas Ulloa

вы можете увидеть этот пример, теперь он отлично работает, я нашел свою проблему и хочу поделиться с вами решением:

---
  slides:
    -
      detailimage: "heliski-img.png"
      mainimage: "heliski-g.jpg"
      title: "Powder South Heliski Guides"
    -
      detailimage: "nuevos-vientos-img.png"
      mainimage: "nuevos-vientos.jpg"
      title: "Centro Experiencial Nuevos Vientos"
---

#full-width-slider.royalSlider.heroSlider.rsMinW
  each slide in document.slides
    .rsContent
      img.rsImg(src='/slideshow/#{slide.mainimage}', alt='#{slide.title}')
      .infoBlock.infoBlockLeftBlack.rsABlock(data-fade-effect='', data-move-offset='10', data-move-effect='bottom', data-speed='200')
      p #{slide.title}
        img.rsImg(src='/slideshow/#{slide.detailimage}', alt='#{slide.title}')

важно, чтобы в каждой строке было написано "in document.slides", чтобы я мог получить доступ из нефрита к метаданным документа. :D

окончательный рендер будет выглядеть так:

<div id="full-width-slider" class="royalSlider heroSlider rsMinW">
  <div class="rsContent"><img src="/slideshow/heliski-g.jpg" alt="Powder South Heliski Guides" class="rsImg">
    <div data-fade-effect="" data-move-offset="10" data-move-effect="bottom" data-speed="200" class="infoBlock infoBlockLeftBlack rsABlock"></div>
    <p>Powder South Heliski Guides</p><img src="/slideshow/heliski-img.png" alt="Powder South Heliski Guides" class="rsImg">
  </div>
  <div class="rsContent"><img src="/slideshow/nuevos-vientos.jpg" alt="Centro Experiencial Nuevos Vientos" class="rsImg">
    <div data-fade-effect="" data-move-offset="10" data-move-effect="bottom" data-speed="200" class="infoBlock infoBlockLeftBlack rsABlock"></div>
    <p>Centro Experiencial Nuevos Vientos</p><img src="/slideshow/nuevos-vientos-img.png" alt="Centro Experiencial Nuevos Vientos" class="rsImg">
  </div>
</div>

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы