保存前的撇号不起作用
apostrophecms beforeSave won't work
这是我的自动更新标题的架构和构造方法。但它根本行不通!它一直提示我填写 Full Name 。你可以 fork 我的 github 来查看整个代码 My Github Apostrophe Tutorial . Someone pleaseeee help me. I falled in love with apostrophe badly. The tutorial that I have been followed is Setting the Title Automatically
module.exports = {
extend: 'apostrophe-pieces',
permissionsFields : true,
name: 'person',
label: 'Person',
pluralLabel: 'People',
beforeConstruct : function(self,options){
options.addFields=
[
{
name: 'title',
label: 'Full Name',
type: 'string',
required: true
},
{
name: 'firstName',
label: 'First Name',
type: 'string',
required: true
},
{
name: 'lastName',
label: 'Last Name',
type: 'string',
required: true
},
{
name: 'body',
label: 'Biography',
type: 'area',
options: {
widgets: {
'apostrophe-rich-text': {
toolbar: ['Bold', 'Italic', 'Link', 'Unlink']
},
'apostrophe-images': {}
}
}
},
{
name: 'phone',
label: 'Phone',
type: 'string'
},
{
name: 'thumbnail',
label: 'Thumbnail',
type: 'singleton',
widgetType: 'apostrophe-images',
options: {
limit: 1,
minSize: [200, 200],
aspectRatio: [1, 1]
}
}
].concat(options.addFields || [])
},
arrangeFields: [{
name: 'contact',
label: 'Contact',
fields: ['firstName', 'lastName', 'phone']
},
{
name: 'admin',
label: 'Administrative',
fields: ['slug', 'published', 'tags']
},
{
name: 'content',
label: 'Biographical',
fields: ['thumbnail', 'body']
}
],
construct: function(self, options) {
self.beforeSave = function(req, piece, options, callback) {
piece.title = piece.firstName + ' ' + piece.lastName;
return callback();
};
}
};
beforeSave
将在用户提交该片段后在服务器上发生,因此 browser-side required
验证将在它有机会构建之前停止提交title
属性.
您可以省略 title
字段中的 required
属性,您的 beforeSave
将按预期工作。如果您想强制以编程方式设置标题并且不在表单中包含该字段,您可以在 title
字段上设置 contextual: true
,该字段将不会在管理器中呈现。
谢谢 Stuart Romanek,现在我知道必填字段会提示用户填写。我可以像你说的那样使用 contextual 覆盖它。问题是,slug。但我想我也必须把 contextual。
module.exports = {
extend: 'apostrophe-pieces',
permissionsFields : true,
name: 'person',
label: 'Person',
pluralLabel: 'People',
beforeConstruct : function(self,options){
options.addFields=
[
{
name: 'firstName',
label: 'First Name',
type: 'string',
required: true,
},
{
name: 'lastName',
label: 'Last Name',
type: 'string',
required: true
},
{
name: 'title',
label: 'Full Name',
type: 'string',
required: true,
contextual : true
},
{
name: 'slug',
label: 'Slug',
type: 'string',
required: true,
contextual: true
},
{
name: 'body',
label: 'Biography',
type: 'area',
options: {
widgets: {
'apostrophe-rich-text': {
toolbar: ['Bold', 'Italic', 'Link', 'Unlink']
},
'apostrophe-images': {}
}
}
},
{
name: 'phone',
label: 'Phone',
type: 'string'
},
{
name: 'thumbnail',
label: 'Thumbnail',
type: 'singleton',
widgetType: 'apostrophe-images',
options: {
limit: 1,
minSize: [200, 200],
aspectRatio: [1, 1]
}
}
].concat(options.addFields || [])
},
arrangeFields: [{
name: 'contact',
label: 'Contact',
fields: ['firstName', 'lastName', 'phone']
},
{
name: 'admin',
label: 'Administrative',
fields: ['slug', 'published', 'tags']
},
{
name: 'content',
label: 'Biographical',
fields: ['thumbnail', 'body']
}
],
construct: function(self, options) {
self.beforeSave = function(req, piece, options, callback) {
// Override title and MUST SET CONTEXTUAL to able to save. Let the
// backend self.beforeSave method do this thing.
// You know why I don't set piece.slug ?
// Because once you already set title , apostrophe made it for you :)
// BUT must put contextual : true on slug. If not, it will prompt you :*
piece.title = piece.firstName + ' ' + piece.lastName;
return callback();
}
}
};
这是我的自动更新标题的架构和构造方法。但它根本行不通!它一直提示我填写 Full Name 。你可以 fork 我的 github 来查看整个代码 My Github Apostrophe Tutorial . Someone pleaseeee help me. I falled in love with apostrophe badly. The tutorial that I have been followed is Setting the Title Automatically
module.exports = {
extend: 'apostrophe-pieces',
permissionsFields : true,
name: 'person',
label: 'Person',
pluralLabel: 'People',
beforeConstruct : function(self,options){
options.addFields=
[
{
name: 'title',
label: 'Full Name',
type: 'string',
required: true
},
{
name: 'firstName',
label: 'First Name',
type: 'string',
required: true
},
{
name: 'lastName',
label: 'Last Name',
type: 'string',
required: true
},
{
name: 'body',
label: 'Biography',
type: 'area',
options: {
widgets: {
'apostrophe-rich-text': {
toolbar: ['Bold', 'Italic', 'Link', 'Unlink']
},
'apostrophe-images': {}
}
}
},
{
name: 'phone',
label: 'Phone',
type: 'string'
},
{
name: 'thumbnail',
label: 'Thumbnail',
type: 'singleton',
widgetType: 'apostrophe-images',
options: {
limit: 1,
minSize: [200, 200],
aspectRatio: [1, 1]
}
}
].concat(options.addFields || [])
},
arrangeFields: [{
name: 'contact',
label: 'Contact',
fields: ['firstName', 'lastName', 'phone']
},
{
name: 'admin',
label: 'Administrative',
fields: ['slug', 'published', 'tags']
},
{
name: 'content',
label: 'Biographical',
fields: ['thumbnail', 'body']
}
],
construct: function(self, options) {
self.beforeSave = function(req, piece, options, callback) {
piece.title = piece.firstName + ' ' + piece.lastName;
return callback();
};
}
};
beforeSave
将在用户提交该片段后在服务器上发生,因此 browser-side required
验证将在它有机会构建之前停止提交title
属性.
您可以省略 title
字段中的 required
属性,您的 beforeSave
将按预期工作。如果您想强制以编程方式设置标题并且不在表单中包含该字段,您可以在 title
字段上设置 contextual: true
,该字段将不会在管理器中呈现。
谢谢 Stuart Romanek,现在我知道必填字段会提示用户填写。我可以像你说的那样使用 contextual 覆盖它。问题是,slug。但我想我也必须把 contextual。
module.exports = {
extend: 'apostrophe-pieces',
permissionsFields : true,
name: 'person',
label: 'Person',
pluralLabel: 'People',
beforeConstruct : function(self,options){
options.addFields=
[
{
name: 'firstName',
label: 'First Name',
type: 'string',
required: true,
},
{
name: 'lastName',
label: 'Last Name',
type: 'string',
required: true
},
{
name: 'title',
label: 'Full Name',
type: 'string',
required: true,
contextual : true
},
{
name: 'slug',
label: 'Slug',
type: 'string',
required: true,
contextual: true
},
{
name: 'body',
label: 'Biography',
type: 'area',
options: {
widgets: {
'apostrophe-rich-text': {
toolbar: ['Bold', 'Italic', 'Link', 'Unlink']
},
'apostrophe-images': {}
}
}
},
{
name: 'phone',
label: 'Phone',
type: 'string'
},
{
name: 'thumbnail',
label: 'Thumbnail',
type: 'singleton',
widgetType: 'apostrophe-images',
options: {
limit: 1,
minSize: [200, 200],
aspectRatio: [1, 1]
}
}
].concat(options.addFields || [])
},
arrangeFields: [{
name: 'contact',
label: 'Contact',
fields: ['firstName', 'lastName', 'phone']
},
{
name: 'admin',
label: 'Administrative',
fields: ['slug', 'published', 'tags']
},
{
name: 'content',
label: 'Biographical',
fields: ['thumbnail', 'body']
}
],
construct: function(self, options) {
self.beforeSave = function(req, piece, options, callback) {
// Override title and MUST SET CONTEXTUAL to able to save. Let the
// backend self.beforeSave method do this thing.
// You know why I don't set piece.slug ?
// Because once you already set title , apostrophe made it for you :)
// BUT must put contextual : true on slug. If not, it will prompt you :*
piece.title = piece.firstName + ' ' + piece.lastName;
return callback();
}
}
};