Javascript 如何在Keystone.js列表映射中指定多个字段?

Javascript 如何在Keystone.js列表映射中指定多个字段?,javascript,node.js,keystonejs,Javascript,Node.js,Keystonejs,想知道如何在Keystone.js列表映射中指定多个字段 例如,根据Keystone数据模型文档: 我是否可以同时使用title和author来创建一个映射,以便在外部模型关系中使用这两个字段 var Post = new keystone.List('Post', { autokey: { path: 'slug', from: 'title', unique: true }, map: { name: 'author, title' }, defaultSort:

想知道如何在Keystone.js列表映射中指定多个字段

例如,根据Keystone数据模型文档:

我是否可以同时使用title和author来创建一个映射,以便在外部模型关系中使用这两个字段

var Post = new keystone.List('Post', {
    autokey: { path: 'slug', from: 'title', unique: true },
    map: { name: 'author, title' },
    defaultSort: '-createdAt'
});

我在管理界面中得到了一个“未定义”的图标。

我可以通过以下方式实现多键映射:

示例模型帖子可以编写如下:

var keystone = require('keystone'),
    Types = keystone.Field.Types;

var Post = new keystone.List('Post', {
    autokey: { path: 'slug', from: 'newKey', unique: true },
    map: { name: 'newKey' },
    defaultSort: '-createdAt'
});

Post.add({
    newKey: { type: Types.Text, watch: true, noedit: true, value: function (callback) {
        var author = this.author;
        var title = this.title;
        keystone.list('User').model.findOne({_id: this.author.toString()}).exec(function (err, u) {
            if (err) {
                callback(err, "unknown")
            } else {
                var r = "("+u.name.first+" "+u.name.last+")-"+title;
                callback(null, r)
            }
        });
    }},
    title: { type: String, required: true, index: true, initial: true },
    state: { type: Types.Select, options: 'draft, published, archived', default: 'draft' },
    author: { type: Types.Relationship, ref: 'User', index: true, initial: true },
    createdAt: { type: Date, default: Date.now },
    publishedAt: Date,
    image: { type: Types.CloudinaryImage },
    content: {
        brief: { type: Types.Html, wysiwyg: true, height: 150 },
        extended: { type: Types.Html, wysiwyg: true, height: 400 }
    }
});

Post.defaultColumns = 'title, state|20%, author, publishedAt|15%'
Post.register();
对于上述模型,在创建帖子时,它首先会要求标题和作者:

这将创建一个类似这样的帖子,并将多个字段作为映射:


您有没有找到解决方案?我也面临着同样的问题,而且文档很少。@PullJosh我很好奇,为什么需要创建基于两个字段的地图?创建包含两个字段的地图非常有用。例如,发票编号基于客户加日期;或客户加供应商等。
var keystone = require('keystone'),
    Types = keystone.Field.Types;

var Post = new keystone.List('Post', {
    autokey: { path: 'slug', from: 'newKey', unique: true },
    map: { name: 'newKey' },
    defaultSort: '-createdAt'
});

Post.add({
    newKey: { type: Types.Text, watch: true, noedit: true, value: function (callback) {
        var author = this.author;
        var title = this.title;
        keystone.list('User').model.findOne({_id: this.author.toString()}).exec(function (err, u) {
            if (err) {
                callback(err, "unknown")
            } else {
                var r = "("+u.name.first+" "+u.name.last+")-"+title;
                callback(null, r)
            }
        });
    }},
    title: { type: String, required: true, index: true, initial: true },
    state: { type: Types.Select, options: 'draft, published, archived', default: 'draft' },
    author: { type: Types.Relationship, ref: 'User', index: true, initial: true },
    createdAt: { type: Date, default: Date.now },
    publishedAt: Date,
    image: { type: Types.CloudinaryImage },
    content: {
        brief: { type: Types.Html, wysiwyg: true, height: 150 },
        extended: { type: Types.Html, wysiwyg: true, height: 400 }
    }
});

Post.defaultColumns = 'title, state|20%, author, publishedAt|15%'
Post.register();