扩展撇号cms中常用输入字段的小部件

时间:2018-06-05 13:43:20

标签: apostrophe-cms

我在撇号2.x中创建了多个小部件,这些小部件工作正常。现在我想要正确地构建和组织它们。 我的大多数模块都有一个从内容宽度更改为浏览器宽度的选项。我试图概括这个功能,而不是将代码放在每个模块中。

例如在我的layout-widget / index.js中我有这个:

module.exports = {
  extend: 'apostrophe-widgets',
  label: 'Layout',
  addFields: [{
    name: 'size',
    label: 'Modulbreite',
    type: 'select',
    choices: [{
        label: 'Content width',
        value: 'content-width'
      },
      {
        label: 'Full width',
        value: 'full-width'
      }
    ],
    required: true
  }]
};

现在我想创建其他小部件,通过扩展此常规模块配置来获取单独的配置选项以及此选择。 文件:test-widget / index.js

module.exports = {
  extend: 'layout-widgets',
  label: 'Test',
  addFields: [{
      name: 'headline',
      label: 'Headline',
      type: 'string',
      required: true
    },
    {
      name: 'content',
      label: 'Add Element',
      type: 'area',
      options: {
        widgets: {
          'fact': {},
          'text': {}
        }
      }
    }
  ]
};

但目前我没有在CMS中看到测试小部件的大小选项。我只看到测试模块中直接定义的选项。这是否可能,或者我必须将尺寸选择插入每个模块本身吗?

祝你好运

1 个答案:

答案 0 :(得分:1)

有可能,您只需要考虑到这个意图来编写'layout-widgets / index.js'。该模块不能只设置addFields,因为它将被扩展它的模块覆盖。相反,它必须使用beforeConstruct函数来操纵addFields。以下是apostrophe-pieces模块的示例:

beforeConstruct: function(self, options) {
  options.addFields = [
    {
      type: 'boolean',
      name: 'published',
      label: 'Published',
      def: false
    }
  ].concat(options.addFields || []);
}

beforeConstruct应与construct处于同一级别,即不嵌套在其中。