我有如下所示的 DocPad 文档:
---
categories: [{slug: ""}, {slug: ""}, ...]
---
Document content.
如何查询meta.category
数组中具有预定义 slug 值的所有文档?
我有如下所示的 DocPad 文档:
---
categories: [{slug: ""}, {slug: ""}, ...]
---
Document content.
如何查询meta.category
数组中具有预定义 slug 值的所有文档?
我们有几种方法可以解决这个问题。
setFilter
https://gist.github.com/4556245
最直接的方法是通过一个getDocumentsWithCategory
模板助手,它利用查询引擎的setFilter
调用,允许我们指定一个自定义函数(我们的过滤器),该函数将针对集合中的每个模型执行,并基于它的布尔返回值保留模型或将其删除集合。
该解决方案的缺点是:
parseAfter
事件https://gist.github.com/4555732
如果我们希望能够获得关于我们可用的所有类别的信息,但仍然需要为每个帖子每次定义我们的类别,那么我们可以使用parseAfter
事件挂钩到我们文档的元数据,提取将类别输出到全局类别对象中,然后使用 id 引用更新我们文档的类别。
缺点是我们仍然必须有多余的类别信息。
https://gist.github.com/4555641
如果我们只想定义我们的类别信息一次,然后只在我们的帖子中引用类别 ID,那么这个解决方案是最理想的。
我设法为给定的 slug 值 "bar in 创建一个 "foo" 集合docpad.coffee
:
collections:
foo: (database) ->
database.findAllLive().setFilter("search", (model, value) ->
categories = model.get('categories')
return false unless Array.isArray categories
for category in categories
if (category.slug and category.slug == value)
return true
return false
).setSearchString("bar")
但是当我尝试创建一个帮助函数返回一个给定数组元(“类别”)的集合时,对象的键(“slug”)和值(“bar”):
createCollection: (meta, key, value) ->
result = @getDatabase().createLiveChildCollection()
.setFilter("search2", (model, searchString) ->
objects = model.get(meta)
return false unless Array.isArray objects
for object in objects
if (object[key] and object[key] == searchString)
return true
return false
).setSearchString(value)
当我尝试调用它时,我得到一个空集合。
我没有解决方案,但是您看过docpad作者博客的源代码吗?有一些查询元数据对象属性是否存在的示例。希望有帮助!