【问题标题】:Does Ember Octane Route class support using mixins?Ember Octane Route 类是否支持使用 mixin?
【发布时间】:2020-03-25 06:40:30
【问题描述】:

我正在升级到 Ember Octane,并且我知道 mixin 已被弃用。我将继续使用它们,直到我弄清楚如何更换它们。与此同时,我想将我的路线切换到使用新的类语法,而不是Route.extend。新的路由类语法是否支持路由混合?如果是,怎么做?

这与Ember Octane Upgrade How to pass values from component to controller有关

灰烬之前的辛烷值:

import Route from '@ember/routing/route';
import AbcAuthenticatedRouteMixin from '../../mixins/abc-authenticated-route-mixin';

export default Route.extend(AbcAuthenticatedRouteMixin, {

    model() {

        return {
            oldPassword: '',
            newPassword: '',
            confirmPassword: ''
        };
    },
})

余烬后辛烷值:

import Route from '@ember/routing/route';
import AbcAuthenticatedRouteMixin from '../../mixins/abc-authenticated-route-mixin';

export default class ChangePasswordRoute extends Route(AbcAuthenticatedRouteMixin, {

    model() {

        return {
            oldPassword: '',
            newPassword: '',
            confirmPassword: ''
        };
    },
}) // I get an error here that says: '{' expected

【问题讨论】:

标签: javascript ember.js


【解决方案1】:

本机类语法没有直接与 Ember 混合系统等效的语法。如果您想在转换为 Octane 时继续使用 mixins,您可以通过将经典类扩展语法与本机类语法混合来实现:

试试

import Route from '@ember/routing/route';
import AbcAuthenticatedRouteMixin from '../../mixins/abc-authenticated-route-mixin';

export default class ChangePasswordRoute extends Route.extend(AbcAuthenticatedRouteMixin) {

    model() {

        return {
            oldPassword: '',
            newPassword: '',
            confirmPassword: ''
        };
    }
}

此外,一些新的框架类,例如 Glimmer 组件,根本不支持 Ember mixin。未来,mixins 将从框架中移除,不会直接替换。对于使用 mixins 的应用,推荐的路径是将 mixins 重构为其他模式,包括:

纯原生类,通过类继承共享功能。 可以在多个类中导入和使用的实用函数。 可以注入多个类的服务,共享 它们之间的功能和状态。

【讨论】:

  • 感谢您的正确回答;详细解释;以及如何处理我的 mixin 的建议。
猜你喜欢
  • 1970-01-01
  • 2020-08-02
  • 1970-01-01
  • 1970-01-01
  • 2014-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多