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各コレクションのすべてのドキュメントで「2 番目」になります。

コレクション内のドキュメントごとに同じメタデータを個別に設定する方法は?

4

2 に答える 2

2

どのような問題を解決しようとしていますか? あなたのアプローチはうまくいかないからです。あなたがやろうとしていることを共有していただければ、別のアプローチを提案できるかもしれません。

文字列である「category」という名前のメタデータ プロパティを設定しているため、現在のアプローチは機能しません。そのメタデータ プロパティは、コレクション自体 ではなく、コレクション内のドキュメントに存在します。

両方のコレクションが同じドキュメント セットを指しています。個々のドキュメントは、そのプロパティに対して 1 つの値のみを持つことができます。'first' と 'second' の両方を指定することはできません。最後に設定したものが優先されます。この場合、「秒」に設定するイベントが最後に発生するため、すべてのドキュメントでそのメタデータ プロパティの値として「秒」が設定されます。

于 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 に答える