Pug - 与条件 .json 对象混合
Pug - mixin with conditional .json object
我正在尝试使用条件(如果在外部存在对象。json),但哈巴狗无法识别它。
所以,我的 json 文件是这样的:
{
"portfolioItems": [object1: {
objectA { ...
},
objectB { ...
},
"buttons": [{
key: value
}, {
key: value
}]
}, object2: {
objectA { ...
},
objectB { ...
}], object3: {
objectA { ...
},
objectB { ...
}
}
}
}
基本上,我需要为 "object 1"(按钮)创建一个额外的 div。
mixin portfolio(css, image, title, description)
div(class= "item " + css)
.wrap-img
img(src= assets + "img/home/" + image)&attributes(attributes)
.wrap-text
h3= title
p= description
if home.portfolioItems.buttons
div.buttons
each val in home.portfolioItems.buttons
a(href= val.link, target="_blank")
img(class= val.className, src= assets + "img/stores/" + val.image)
div.portfolio--items
- var projects = home.portfolioItems;
each item in projects
+portfolio(item.class, item.image, item.title[lang], item.description[lang])(alt= item.title[lang], title=item.title[lang])
Pug 可以访问 "home.portfolioItems.buttons",但它不能在 mixin 中执行条件?因为我可以 运行 它在外面(但我不想要它)。
提前致谢。抱歉英语有任何错误。 ;)
Mixins 有自己的作用域,因此您需要将它们传递到一个对象中。我还推荐一个单一的选项对象,它比跟踪单独的参数更容易,与顺序无关,并且也更具可读性。
请注意,您可以调用 mixin 并使用定义跨越多行
+portfolio({
"css": "css",
"image": "image",
"title": "title",
"description": "description",
"items": portfolioItems
})
mixin 应该是这样的:
mixin portfolio(options)
div(class= "item " + options.css)
.wrap-img
img(src= assets + "img/home/" + options.image)&attributes(options.attributes)
.wrap-text
h3= options.title
p= options.description
if options.items.buttons
div.buttons
each val in options.items.buttons
a(href= val.link, target="_blank")
img(class= val.className, src= assets + "img/stores/" + val.image)
如果按钮 属性 在 portfolioItems 中不存在,您也可以避免传递所有项目并传递按钮或空数组:
+portfolio({
"css": "css",
"image": "image",
"title": "title",
"description": "description",
"buttons": portfolioItems.buttons || []
})
这将避免条件测试的需要,因为你保证在 mixin 中至少有一个空数组:
mixin portfolio(options)
div(class= "item " + options.css)
.wrap-img
img(src= assets + "img/home/" + options.image)&attributes(options.attributes)
.wrap-text
h3= options.title
p= options.description
div.buttons
each val in options.buttons
a(href= val.link, target="_blank")
img(class= val.className, src= assets + "img/stores/" + val.image)
我正在尝试使用条件(如果在外部存在对象。json),但哈巴狗无法识别它。
所以,我的 json 文件是这样的:
{
"portfolioItems": [object1: {
objectA { ...
},
objectB { ...
},
"buttons": [{
key: value
}, {
key: value
}]
}, object2: {
objectA { ...
},
objectB { ...
}], object3: {
objectA { ...
},
objectB { ...
}
}
}
}
基本上,我需要为 "object 1"(按钮)创建一个额外的 div。
mixin portfolio(css, image, title, description)
div(class= "item " + css)
.wrap-img
img(src= assets + "img/home/" + image)&attributes(attributes)
.wrap-text
h3= title
p= description
if home.portfolioItems.buttons
div.buttons
each val in home.portfolioItems.buttons
a(href= val.link, target="_blank")
img(class= val.className, src= assets + "img/stores/" + val.image)
div.portfolio--items
- var projects = home.portfolioItems;
each item in projects
+portfolio(item.class, item.image, item.title[lang], item.description[lang])(alt= item.title[lang], title=item.title[lang])
Pug 可以访问 "home.portfolioItems.buttons",但它不能在 mixin 中执行条件?因为我可以 运行 它在外面(但我不想要它)。
提前致谢。抱歉英语有任何错误。 ;)
Mixins 有自己的作用域,因此您需要将它们传递到一个对象中。我还推荐一个单一的选项对象,它比跟踪单独的参数更容易,与顺序无关,并且也更具可读性。
请注意,您可以调用 mixin 并使用定义跨越多行
+portfolio({
"css": "css",
"image": "image",
"title": "title",
"description": "description",
"items": portfolioItems
})
mixin 应该是这样的:
mixin portfolio(options)
div(class= "item " + options.css)
.wrap-img
img(src= assets + "img/home/" + options.image)&attributes(options.attributes)
.wrap-text
h3= options.title
p= options.description
if options.items.buttons
div.buttons
each val in options.items.buttons
a(href= val.link, target="_blank")
img(class= val.className, src= assets + "img/stores/" + val.image)
如果按钮 属性 在 portfolioItems 中不存在,您也可以避免传递所有项目并传递按钮或空数组:
+portfolio({
"css": "css",
"image": "image",
"title": "title",
"description": "description",
"buttons": portfolioItems.buttons || []
})
这将避免条件测试的需要,因为你保证在 mixin 中至少有一个空数组:
mixin portfolio(options)
div(class= "item " + options.css)
.wrap-img
img(src= assets + "img/home/" + options.image)&attributes(options.attributes)
.wrap-text
h3= options.title
p= options.description
div.buttons
each val in options.buttons
a(href= val.link, target="_blank")
img(class= val.className, src= assets + "img/stores/" + val.image)