2013-10-08 2 views
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 будет «вторым» для всех документов каждой коллекции.

Как установить одинаковые метаданные по каждому документу в коллекции?

+0

Как еще я могу отделить один и тот же документ для разных категорий И знать категорию, которую он будет отображать, с текущим запросом на создание соответствующей навигации и т. Д.? – stackasec

+0

Таким образом, нет абсолютно никакой возможности отображать один и тот же документ в нескольких коллекциях, но с разными (мета) данными для каждого? – stackasec

ответ

2

Какая проблема вы пытаетесь решить? Потому что ваш подход не сработает. Если вы разделяете то, что вы пытаетесь сделать, мы можем предложить альтернативный подход.

Ваш текущий подход не будет работать, поскольку вы устанавливаете свойство метаданных с именем «категория», которое является строкой. Это свойство метаданных живет на документах в коллекции, а не на коллекции .

Обе коллекции указывают один и тот же набор документов. Каждый отдельный документ может иметь только одно значение для этого свойства. Он не может быть «первым» и «вторым». Последний, чтобы установить его, выигрывает, и в этом случае событие, которое устанавливает его на «второе», происходит последним, и поэтому все документы имеют «второй» в качестве значения для этого свойства метаданных.

+1

Отличное объяснение. Если вы хотите переименовать 'category' в' categories' и сделать его массивом, вы можете попробовать: '(model.attributes.categories? = []). Push ('first')' вместо setMeta – balupton

+0

Спасибо для совместного использования. – stackasec

+0

** rrrr Почему вы не можете использовать stackoverflowers только для нормальной работы в этих полях?! ** Я надеялся, что DocPad позволит предоставлять документы, разделяемые между категориями/продуктами, вместо того, чтобы продолжать работу с дублированными двойными как и с страницами Jekyll и Github. @balupton - то, что ваш фрагмент все равно будет ссылаться на тот же документ, а не на сборник, поэтому он не будет работать:/ Нет ли способа установить отдельные атрибуты в созданную коллекцию? – stackasec

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).

+0

Мм, не получится. Можете ли вы расширить свой пример, чтобы показать вторую коллекцию, устанавливающую те же мета-свойства с различными данными сбора данных для каждой коллекции? – stackasec

+0

Где в docpad находится ваш образец? – stackasec

+0

Код содержится в файле 'docpad.coffee' или docpad.js', но я просто переписал ответ с лучшим решением и ссылкой на полный пример. Cheers :) –

Смежные вопросы