1

我正在尝试在不同的集合上设置产品类别,但只有在 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对于每个集合的所有文档,将是“第二”。

如何为集合中的每个文档单独设置相同的元数据?

4

2 回答 2

2

你想解决什么问题?因为你的方法行不通。如果您分享您正在尝试做的事情,我们可能会建议另一种方法。

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

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

于 2013-10-10T14:26:24.317 回答
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 左右)。

于 2013-11-01T04:41:03.630 回答