在“for article,slug in public.articles._data”中什么是“slug”?有没有办法使用嵌套数组?

时间:2015-04-24 19:59:30

标签: json node.js pug harp

我尝试使用NodeJS静态博客生成器HarpJS。在教程中有元数据的例子:

for article, slug in public.articles._data
 a(href="/articles/#{ slug }")
  h2= article.title

_data.json文件:

{
 "hello-world": {  <-- available everywhere as public.articles._data
  "title": "Hello World.",
  "date": "2013-02-28"
 },
 "hello-brazil": {
  "title": "Hello Brazil.",
  "date": "2013-03-04"
 }
}

如果我理解正确for article获取每个高级对象,我们可以使用article.title获得标题,或使用article.date获取日期。但是什么是slug?它是Jade / HarpJs中的预定义变量吗?如果是这样,还有其他人,还是我的概念错了?我找不到关于这个主题的任何信息,如果有一篇好文章要阅读我会很感激。谢谢。

正如@Brennan在评论中建议的那样,第二个论点可能是一个索引。简单替换和重命名变量articleslug证明了这一点。但还有一个问题。请考虑这个例子:

{
 "hello-world": {
  "title": "Hello World.",
  "date": "2013-02-28",
  "test": {
    "testContent": "123"
  }
 },
 "hello-brazil": {
  "title": "Hello Brazil.",
  "date": "2013-03-04"
 }
}


for s, a in public.articles._data
 a(href="/articles/#{ a }")
  h2= s.title
  h3= s.date
  h3= a
  - var obj =  s.test
  h3= obj
  h3= obj.testContent

此代码在编译期间出错。如果我评论最后一行,它的工作原理。而且我不能用文档中的代码片段替换最后一行:

each val, index in obj
  h1=index + ': ' + val

没有嵌套和二维数组?

2 个答案:

答案 0 :(得分:1)

以下示例可能回答了以下问题:

<h1><%= title %></h1>
<ul>
  <% for (var slug in public.posts._data) { %>
    <% var post = public.posts._data[slug] %> 
    <li>
      <a href="posts/<%= slug %>">
        <%= post.title %>
      </a>
    </li>
  <% } %>
</ul>

答案 1 :(得分:0)

要回答原始问题,请参阅我的评论:

  

缺乏文档。我并不完全相信这会起作用。根据这个玉只支持每个和同时构造。在其他语言中,for..in循环中的第二个参数将是索引。这可能是个案,但我找不到具体的文件

第二个问题是模拟对象的问题。

看起来您需要检查以确保您的属性已在您的模拟数据中定义,或者进行一些检查以确保您期望的属性存在。