如何跨集合设置相同的元数据?

时间:2013-10-08 15:22:43

标签: docpad

我试图在不同的集合上设置一个产品类别,但只有在docpad.coffee中定义的最后一个集合实际上在尝试时才设置它

firstCollection: ->
    @getCollection("html").findAllLive().on "add", (model) ->
        model.setMeta({category: 'first'})
secondCollection: ->
    @getCollection("html").findAllLive().on "add", (model) ->
        model.setMeta({category: 'second'})
对于每个集合的所有文档,

document.category将为“秒”。

如何在集合中按文档单独设置相同的元数据?

2 个答案:

答案 0 :(得分:2)

你想解决什么问题?因为你的方法不起作用。如果你分享你想要做的事情,我们或许可以提出另一种方法。

您当前的方法无效,因为您正在设置名为“category”的元数据属性,该属性是一个字符串。该元数据属性存在于集合中的文档而不是集合本身。

两个集合都指向同一组文档。每个单独的文档只能具有该属性的单个值。它不能同时是“第一”和“第二”。设置它的最后一个获胜,在这种情况下,将其设置为“秒”的事件最后发生,因此所有文档都具有“秒”作为该元数据属性的值。

答案 1 :(得分:1)

更新:我找到了更好的方法:model.setMetaDefaults({foo:'bar'})

例如,要创建一个默认cssClass post的博客集合:

collections: {
  blog: function() {
    return this.getCollection("documents")
      .findAllLive({relativeOutDirPath:'blog'}, [{filename:-1}])
      .on("add", function (model) {
        model.setMetaDefaults({'cssClass': 'post'})
      });
  }
},

这将包含在您的docpad.coffee文件中,或者在我的情况下,docpad.js

https://github.com/nfriedly/nfriedly.com/blob/master/docpad.js#L72查看完整上下文的工作示例(集合称为“techblog”,以72开头)。