Ember Octane与旧Ember使用“重新打开()”方法的能力

xurqigkl  于 2022-09-28  发布在  其他
关注(0)|答案(1)|浏览(179)

因此,我正在将一个主app.js文件转换为Ember 4和本地javascript。我的问题是人们如何处理e1d1e类这样的修改。我当前的代码部分如下所示。

Route.reopen({
  //breadCrumb: null
  currentRouteModel: function () {
    return this.modelFor(this.routeName);
  }
});

我的意思是,我想我可以在任何地方重写方法的示例案例,只做它返回的内容,但我想看看人们在做什么。我还在app.js上重新打开了一个Component,需要在迁移中修复它。

ljsrvy3e

ljsrvy3e1#

我看到人们做的主要事情有两件:

  • 将代码复制到使用它的地方
  • 制作一个类装饰器并将其应用于需要它的类

类装饰器看起来像这样(并且只在JS中工作,TypeScript不知道“可能”-继承如何与类装饰器一起工作(好吧,从技术上讲,它在TS中“工作”,但会出现类型错误):

// usage
@withCurrentRouteModel
export default class MyRoute extends Route {}

// implementation
function withCurrentRouteModel(OriginalRoute) {
  return class extends OriginalRoute {
    @service router;

    get routeName() {
      return this.router.currentRouteName;
    }

    get currentRouteModel() {
      this.modelFor(this.routeName);
    }

  }
}

我添加了RouterService的用法
因为我不熟悉routeName

相关问题