1

使用 JavaScript 时如何配置 DocPad 集合?

在站点启动期间显示以下消息:“警告:自定义集合 myCollection 不是有效的集合实例”

配置:

var docpadConfig = {
  collections: {
    // The collection causing problems.
    myCollection: function () {
      return [];
    }
  },

  templateData: {
    site: {
      url: "http://site-url.com",
      oldUrls: [],
      title: "Site title",
      description: "Site description",
      keywords: "DocPad",
      styles: ["/vendor/normalize.css", "/vendor/h5bp.css", "/styles/style.css"],
      scripts: ["/vendor/log.js", "/vendor/modernizr.js", "/scripts/script.js"]
    },

    getPreparedTitle: function () {
      if (this.document.title) {
        return this.document.title + " | " + this.site.title;
      } else {
        return this.site.title;
      }
    },

    getPreparedDescription: function () {
      return this.document.description || this.site.description;
    },

    getPreparedKeywords: function () {
      return this.site.keywords.concat(this.document.keywords || []).join(", ");
    }
  }
};

module.exports = docpadConfig;

通过观看 Benjamin Lupton 的一些 YouTube 剪辑,我了解到 DocPad 使用 Backbone.js - 我应该以某种方式导入 Backbone 并在配置中使用 Backbone.Collection 实例吗?如果是,我该怎么做?我发现了很多 Coffee 脚本示例,但我似乎无法弄清楚如何将它们应用于纯 JavaScript。

任何冗长的 JavaScript 配置示例都将不胜感激,因为我相信我迟早会想要调整配置:)

4

1 回答 1

3

使用以下方法使其工作:

var docpadConfig = {
  collections: {
    journalEntries: function () {
      var documents = this.getCollection("documents");
      var sortByDescendingDate = [{ date: -1 }];
      // I've added "type" to the meta section of some documents.
      var typeEqualsJournal = { type: { $eq: "journal" } };
      var journals = documents.findAllLive(typeEqualsJournal, sortByDescendingDate);
      journals.on("add", function (model) {
        model.setMetaDefaults({ layout: "journal" });
      });
      return journals;
    }
  },

...
于 2013-09-22T09:37:04.230 回答