ember.js - Ember Octane 如何转换自定义 mixin
问题描述
这个问题与:Ember Octane Route 类是否支持使用 mixins?在 Ember Octane 中正式弃用了 Mixin。
问题:
用什么替换 Ember mixins 的最佳选择是什么,我如何实现它?
语境:
我有自定义 mixin 来扩展 ember-simple-auth (~v1.8.2) 提供的功能,在创建方法时它不可用(见下文)。我目前正在使用 ember-simple-auth 3.0.0 https://github.com/simplabs/ember-simple-auth。在 github 上的文档中,他们似乎在 Ember Octane 上使用了自己的 mixin,如您所见:
// my-engine/addon/routes/index.js
import Route from '@ember/routing/route';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
export default class IndexRoute extends Route.extend(AuthenticatedRouteMixin) {
triggerAuthentication() {
this.transitionToExternal('login');
}
}
看来我不是唯一一个遇到这个问题的人,因为 Simple Auth 也不知道他们想要走哪条路线:https ://github.com/simplabs/ember-simple-auth/issues/2185
选项:
- 纯原生类,通过类继承共享功能。
- 可以在多个类中导入和使用的实用函数。
- 可以注入多个类的服务,在它们之间共享功能和状态。
我有以下身份验证混合:
- Application Route:这个处理用户是否登录以及用户是否启用了双因素身份验证(2FA),如果启用,则验证用户是否已通过 2FA 进行身份验证。这是因为 simple auth 在开发 mixin(s) 时没有提供 2FA
- Authenticated Route:确保用户已登录。如果他们未登录,则将用户路由到登录页面。一旦他们登录,他们就会被路由回他们最初尝试访问的页面
- UnAuthenticated Route:防止登录用户进入某些登录用户不应该去的路由
解决方案
首先,我想非常清楚地表明,在 Ember 中 mixins 并没有被“正式弃用”,据我所知,甚至没有关于它的有效 RFC。正如升级指南所解释的,由于没有扩展 EmberObject,Glimmer 组件不支持 mixin,但预先存在的框架类(Route、Controller 等)必须这样做,否则这将是一个重大变化。
没有替代 mixins 的最佳选择,因为它取决于 API 的使用。如果您要问如何替换 ember-simple-auth mixins,我的回答是在插件本身提供替代 API 之前您不能。Mixins 和您发布的示例代码将在可预见的未来继续工作。
您可以在此 PR 中看到使用类继承来共享功能的示例。
推荐阅读
- javascript - 如何在 Selenium webdriver 的帮助下调用由一些 JavaScript 事件触发的 C# 代码?
- node.js - 在获取给定用户 uid 数组的所有文档时获取空数组
- r - renderLeaflet:图例不呈现闪亮
- r - 缺少值时将 XML 转换为数据框
- python - 向结构化 numpy 数组添加字段 (4)
- mongoose - Mongoose 模式方法根据传递的输入检查密码
- javascript - 获取为元素注册的 onClickListener
- ios - 分段错误:11 Xcode 10
- java - 如何将ArrayList转换为可分页对象springboot
- python - ModuleNotFoundError:没有名为“PyQt5.QtWebEngineWidgets”的模块