【问题标题】:Dynamic type select in keystonejs modelkeystonejs模型中的动态类型选择
【发布时间】:2018-10-25 04:07:12
【问题描述】:

我想在 adminUI 中使用来自 web 服务的字段的组合框。我正在考虑使用预“查找”挂钩获取数据,然后覆盖架构中“受众”属性的选项属性。

架构:

Compliance.add({
  title: { type: Types.Text, required: true, initial: true, index: true }, 
  url: { type: Types.Url, required: true, initial: true },
  position: { type: Types.Number, initial: true },
  audience: { type: Types.Select, options: [], many: true, initial: true},
});

钩子:

Compliance.schema.pre('find', async function(next) {
  let audiences = await audienceService.getAudiences();
  next();
})

但是我没有找到绑定数据的方法。任何想法如何做到这一点?

谢谢

【问题讨论】:

    标签: node.js mongoose keystonejs


    【解决方案1】:

    您可以尝试从选项中创建一个函数:

    function getAudiences() {
        return ['a', 'b', 'c'];
    }
    
    Compliance.add({
      title: { type: Types.Text, required: true, initial: true, index: true }, 
      url: { type: Types.Url, required: true, initial: true },
      position: { type: Types.Number, initial: true },
      audience: { type: Types.Select, many: true, initial: true, options: getAudiences() }
    });
    

    结果如下:

    【讨论】:

    • 当我使用来自外部服务的异步函数来填充选项时,我得到一个错误,因为 js 无法推断这是一个数组。此外,我还有一个问题,即使用此公式,该函数仅在实例化架构时才会执行,因此如果重新启动服务器并再次实例化架构,我只能拥有动态数据。这是一个很好的方法,但我需要找到在实例化架构后修改架构或重新实例化修改后的新架构的方法。
    • 如果数据如此动态,为什么不考虑 Types.Relationship?
    • 因为如果我使用 Types.Relationship,我必须使用来自网络服务的数据来存储和维护一个集合。
    • 在这种情况下,我仍然建议使用 Types.Relationship。您可以设置计划作业以通过 Web 服务更新您的受众模型,同时通过不删除模型合规性已引用的那些记录来保持完整性。
    • 我将此标记为最有帮助的答案。以这种方式工作,并且像 keystonejs 一样被创建来做到这一点。但是,我仍然会努力寻找修改 keystone 类型的解决方案。
    猜你喜欢
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 1970-01-01
    • 2018-08-23
    相关资源
    最近更新 更多