beforeConstruct 中的动态 options.addFields 不起作用
Dynamic options.addFields in beforeConstruct not working
我想在 apostrophe-cms 中创建一个简单的通用可重用纯文本小部件,所以我制作了模块 text-only-widgets
。
使用以下代码
在lib/modules/text-only-widgets/index.js
module.exports = {
extend: 'apostrophe-widgets',
label: 'Section Heading',
beforeConstruct: function (self, options) {
console.log('options.addFields : ', options.addFields)
options.addFields = [
{
name: 'sectionHeading',
label: 'Section Heading',
type: 'string'
}
].concat(options.addFields || [])
}
};
在lib/modules/text-only-widgets/views/widget.html
{{ data.widget.sectionHeading }}
现在我尝试在我的一个页面中使用上面的小部件,如下所示:
<div>
{{
apos.area(data.page, 'aboutUsDescriptionTwo', {
widgets: {
'text-only': {
addFields: [
{
name: 'sectionDescription', // set these fields dynamically
label: 'Section Description', // set these fields dynamically
type: 'string'
}
]
}
}
})
}}
</div>
如下图所示,请注意即使将标签为 Section Description 的 addFields 传递给纯文本小部件也不会覆盖 [=] 中设置的默认值46=].
我在 index.js 中的 options.addFields 上尝试了 console.log,但它记录未定义,如下所示,我也尝试了几种不同的变体,但 none 有效。
addFields
选项在模块级别,它控制此小部件的 所有 实例存在哪些字段。它不是一个可以通过 apos.area
传递给小部件的 个 实例的选项。所以你不能这样做。
正确的方法是创建第二个模块,使用 extend
扩展第一个模块,并在模块级别使用 addFields
添加附加字段。然后,在您所在的地区,您可以根据您的需要只提供两种小部件类型中的一种,或同时提供两种。
因此,除了 lib/modules/text-only-widgets/index.js
,您还将拥有:
// in lib/modules/text-plus-description-widgets/index.js
module.exports = {
extend: 'text-only-widgets',
label: 'Section Heading and Description',
addFields: [
{
name: 'sectionDescription',
label: 'Section Description',
type: 'string'
}
]
};
而且这个小部件也会有自己的 widget.html
。
我想在 apostrophe-cms 中创建一个简单的通用可重用纯文本小部件,所以我制作了模块 text-only-widgets
。
使用以下代码
在lib/modules/text-only-widgets/index.js
module.exports = {
extend: 'apostrophe-widgets',
label: 'Section Heading',
beforeConstruct: function (self, options) {
console.log('options.addFields : ', options.addFields)
options.addFields = [
{
name: 'sectionHeading',
label: 'Section Heading',
type: 'string'
}
].concat(options.addFields || [])
}
};
在lib/modules/text-only-widgets/views/widget.html
{{ data.widget.sectionHeading }}
现在我尝试在我的一个页面中使用上面的小部件,如下所示:
<div>
{{
apos.area(data.page, 'aboutUsDescriptionTwo', {
widgets: {
'text-only': {
addFields: [
{
name: 'sectionDescription', // set these fields dynamically
label: 'Section Description', // set these fields dynamically
type: 'string'
}
]
}
}
})
}}
</div>
如下图所示,请注意即使将标签为 Section Description 的 addFields 传递给纯文本小部件也不会覆盖 [=] 中设置的默认值46=].
我在 index.js 中的 options.addFields 上尝试了 console.log,但它记录未定义,如下所示,我也尝试了几种不同的变体,但 none 有效。
addFields
选项在模块级别,它控制此小部件的 所有 实例存在哪些字段。它不是一个可以通过 apos.area
传递给小部件的 个 实例的选项。所以你不能这样做。
正确的方法是创建第二个模块,使用 extend
扩展第一个模块,并在模块级别使用 addFields
添加附加字段。然后,在您所在的地区,您可以根据您的需要只提供两种小部件类型中的一种,或同时提供两种。
因此,除了 lib/modules/text-only-widgets/index.js
,您还将拥有:
// in lib/modules/text-plus-description-widgets/index.js
module.exports = {
extend: 'text-only-widgets',
label: 'Section Heading and Description',
addFields: [
{
name: 'sectionDescription',
label: 'Section Description',
type: 'string'
}
]
};
而且这个小部件也会有自己的 widget.html
。