如何最好地处理自定义字段默认值和类别设置日志

一些背景信息

出现这种情况的原因是:

  1. activity pub 插件在客户端设置了一些默认值(此处)。

  2. 所有类别自定义字段的更改都会被记录为核心中的类别设置更改(此处)。

“1”(在客户端设置类别自定义字段的默认值)似乎是目前处理类别自定义字段管道的最佳方式,因为 update 类别操作会自动保存它们,并且您希望确保在自定义字段相互依赖时(如 AP 插件中的情况)设置了默认值。

请注意,目前插件无法选择性地将自定义字段序列化到服务器(不进行猴子补丁)。

鉴于以上情况,我想知道“2”是否有意义?正如 David 指出的那样,考虑到管道的当前配置,自定义字段的更改并不一定表示类别设置配置的更改(即从 nil 变为默认值)。

想听听其他人对此的看法。也许我遗漏了处理类别自定义字段默认值的更好方法。

3 个赞

@david 再次将此推到你的列表前面。你直觉如何?如果你认为核心中可能需要更改类别自定义字段的保存方式,我可以尝试一下。或者也许我会尝试寻找一种为自定义字段设置默认值的新方法。或者也许我们暂时搁置它?

是的,这确实棘手。我猜大多数插件都不会遇到这个问题,因为它们类别设置的“默认值”是 null。

你是否有一个核心 API 更改的想法,可以帮助改善这种情况?

完全未经测试,但我认为我们可以通过使用原始 HTML 输入字段(注意是小写的 input 而不是 Ember 的双向绑定 \u003cInput 组件)来立即实现一些功能。

<input
  value={{or category.custom_fields.my_field "default value"}}
  {{on "change" this.updateMyFieldValue}}
/>

有了这个策略,我们就可以控制如何从模型实例读取/写入值。因此,如果 UI 中的值设置为默认值,我们可以将其作为“null”写入自定义字段:

@action
updateMyFieldValue(event){
  let newValue = event.target.value;
  if(newValue === "default value"){
    newValue = null;
  }

  this.category.set("custom_fields.my_field", newValue);
}

(然后你就可以移除你在 OP 的 (1) 中描述的默认值配置)

1 个赞