弃用通知:获取用户对象的时区属性已弃用,请改用 user_option 对象

当您尝试以如下方式从 store 中加载用户时,会收到此通知

api.container.lookup('service:store').find('user', api.getCurrentUser().username).then((user) => {
});

显然,从 store 中水合(hydrate)用户时会访问该用户的时区,从而触发此通知。

我使用上述代码来访问用户的 user_fields,而这些字段在 api.getCurrentUser() 返回的用户对象中并未填充。

是否有其他方法可以在主题或主题组件中获取 user_fields,而无需使用上述代码结构?

我找到了一个绕过此弃用提示的方法,同时仍然可以访问 user_field

api.getCurrentUser().findDetails().then((user) => { ... });

不过,findDetails 总是向服务器发送请求。没有任何缓存。一旦调用它,当前用户就会拥有已填充的 user_fields。

因此,你可以像这样优化一下逻辑:


function withUserFields(user, callback) {
  if (user.user_fields === undefined) {
    user.findDetails().then(callback);
  } else {
    callback(user);
  }
}

withUserFields(api.getCurrentUser(), (user) => {
  // 使用 user.user_fields[] 执行某些操作
});