我在撇号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中看到测试小部件的大小选项。我只看到测试模块中直接定义的选项。这是否可能,或者我必须将尺寸选择插入每个模块本身吗?
祝你好运
答案 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
处于同一级别,即不嵌套在其中。