2013-10-08 77 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

更新:我發現了一個更好的辦法來做到這一點:

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

這會去你的​​文件或:model.setMetaDefaults({foo:'bar'})

例如,與cssClasspost的默認創建一個博客集,在我的情況下,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'文件中,但是我只是用一個更好的解決方案和一個完整示例的鏈接重新編寫了答案。歡呼:) –

相關問題