node.js - KeystoneJS 变量相关帖子

标签 node.js keystonejs

我有一个地点的架构,并且该地点的类型可以具有三个值地区、国家/地区、城市。每种类型都有一个单独的架构,其中包含大量相关数据。

我的问题是;有没有一种方法可以将这个地方连接到模式中正确的对象?我知道我可以执行 City.find({ ... }) 来获取对象数据。

我确实添加了下面的代码,但它无法从管理部分的地点表单中进行编辑。是否有可能做到这一点?

Place.schema.virtual('data').get(function() {

    if (this.type == 'country') {
        var c = Country.findOne({ parent: this });
        if (c) {
            return c;
        }
    }

    if (this.type == 'city') {
        var c = City.findOne({ parent: this });
        if (c) {
            return c;
        }
    }

});

我需要具有名称的地点对象,然后需要存储在不同模式中的每种类型的数据。 Keystone 可以处理这个问题吗?

最佳答案

您必须在集合之间创建关系:

  1. 在您的 Place 模型 (Place.js) 中,为每个链接的集合添加一个字段

    地点.add({ 标题:{ 类型:字符串,必需:true }, 区域:{ type: 类型。关系, ref: '区域' }, Country:{ type: 类型。关系, ref: '国家' }, city:{ type: 类型。关系, ref: '城市' }, });

  2. 为每个链接的集合创建一个模型:

    区域.add({ 名称:{ 类型:字符串,必需:true }, 描述:{ 类型:Types.Html,所见即所得:true,高度:400 } });

    国家/地区.add({ 名称:{ 类型:字符串,必需:true }, 描述:{ 类型:Types.Html,所见即所得:true,高度:400 } });

    城市.add({ 名称:{ 类型:字符串,必需:true }, 描述:{ 类型:Types.Html,所见即所得:true,高度:400 } });

  3. 要在管理中进行选择输入,您必须在地点定义中添加向下钻取属性(仍在您的模型中)

var Place= new keystone.List('地点', { map :{名称:'标题'}, 向下钻取:“区域”, 深入分析:“国家/地区”, 深入分析:“城市” });

  • 不要忘记在 keystone.js 中添加一条路由来查看管理菜单项(注意复数):

    keystone.set('nav', { ... '地点':'地点', .... });

  • 关于node.js - KeystoneJS 变量相关帖子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32840048/

    相关文章:

    node.js - 我可以在 KeystoneJS 的 ListView 中查看关系吗?

    javascript - Node.js 遇到 'listener must be a function' 错误

    javascript - Twitter API Javascript 扩展模式

    node.js - Amazon SES SendRawEmail (Node.JS) 中的电子邮件未显示 To :, Cc 和 Bcc

    node.js - 使用 LetsEncrypt 和 Heroku 配置 KeystoneJS 应用程序

    keystonejs - 在此示例中,为什么 keystonejs 在启动时抛出未知列表错误?

    node.js - 通过 NodeJS 发送 MediaStream

    javascript - 在ElectronJS应用中无法在渲染器进程中访问__dirname变量

    javascript - KeystoneJS:将自定义动态字段添加到生成的管理 UI

    node.js - 执行经过身份验证的 keystone.js/GraphQL API 查询