コントローラーでのゲッターの上書きに関する問題 (3.0.0)

イニシャライザーにこのコードがあり、allAdminRoutes のゲッターをオーバーライドしようとしています。

    api.modifyClass('controller:admin-plugins', {
      pluginId: PLUGIN_ID,

      get allAdminRoutes() {
        return this.model
          .filter(p => p?.enabled)
          .map(p => {
            return p.admin_route;
          })
          .filter(Boolean);
      },
    });

TypeError: this.model is undefined というエラーが発生しています。

別に構わないのですが、これは単に 元のゲッターコード です(まだ何も変更していません!)

何が足りないのでしょうか?この方法でゲッターをオーバーライドすることはサポートされていないのでしょうか、それとも何らかのスコープの問題が発生しますか?

「いいね!」 4

不思議なことに、これは最新版では問題ではないようです。(これは本番環境でのテストでした。)

クリーンな3.0.0安定版で再現できるか確認します。

「いいね!」 1

サンプルは機能するはずですが、安定版リリースと現在との間に、関連する変更があったとは認識していません。もし問題が再現できた場合は、お知らせください!

「いいね!」 1

デイビッドさん、ありがとうございます。そうします。はい、気づきました。環境が完全にクリーンではなかったため、今は明らかに私の番です。

「いいね!」 1

OK David、どうやら(これは奇妙ですが):

  • 本番環境では動作する
  • 開発環境では 3.0.0 以降(それ以前の可能性もあり)で失敗する
    • Docker を使わない純粋な開発環境でも、非常にクリーンな(ただし設定が不完全な可能性のあるカスタム Docker 開発環境)でもテストしました。

エラーは以下の通りです:

エラーが発生しました:

- レンダリング中:
  - トップレベル
    application
      discourse-root
        sidebar-wrapper
          admin
            admin-wrapper
              nav-item
                link-to
                  -link-to
Uncaught (in promise) TypeError: ルート「adminPlugins」へのリンク生成中にエラーが発生しました:this.model が定義されていません
    get allAdminRoutes admin-plugins.js:20

return this.model の前にデバッガーステートメントを入れても、デバッガは決して発火しない点にご注意ください。

@RGJ 氏も親切にこの問題を調査し、同様の結果を再現できました。

これは少し問題です。明らかに本番に上げる前に開発を進める必要があるからです…でも、それは言うまでもありませんね!:sweat_smile: また、Stable バージョンで問題が発生しているのも少し厄介です。

一時的に Contribute > Bug に移動しました…

「いいね!」 2

OK、ここでの問題はさらに確実になりました…スタックトレースで mergeMixins が言及されているためです。

(これを見つけてくれた @RGJ さん、ありがとうございます)

「いいね!」 4

素晴らしい調査です - @merefield@RGJ さん、ありがとうございます。

Discourse 内でこれを修正するには、あまり多くのことはできないと思います。指摘されたように、問題は Ember のアップストリームにあるようです。問題のあるメソッドをパッチできるかもしれませんね :thinking:

開始するために、進捗を追跡できるように、最小限の失敗するテストケースを追加しました。テストには、modifyClass システムによって問題がトリガーされる理由を説明するコメントがいくつかあります。

「いいね!」 4

ええ、あなたの努力にも感謝します。その問題が未解決のままになっているのは奇妙ですね? (Ember) 4.x で解決されるかご存知ですか?

残念ながら、Ember 4.x でも問題はまだ存在するようです :cry:

「いいね!」 1

おかしいことに、Emberプロジェクトではそれが唯一の進歩のようです。関連するPRはまだドラフト中です。時間があれば、優先順位を付けるよう丁寧に依頼するだけで十分かもしれません。

これは第三者のスタッフメンバーによって開かれたものであることを十分に理解しています。

GitHub - emberjs/ember.js: Ember.js - A JavaScript framework for creating ambitious web applications で、このPR、このトピック、そしてあなたのテストを参照して、問題を提起する価値はありますか?

はい、私のテストはそれらに基づいています(ただし、ディスコース固有のapi.modifyClass APIを使用しています)。新しいイシューを開くべきではないと思います。これは、すでに開いているものと100%同じです。優先度を上げるために何かできるかどうか見てみましょう。

「いいね!」 3

進捗がありました。修正のためのPRが [BUGFIX LTS] Don't run getters while applying mixins by wycats · Pull Request #20388 · emberjs/ember.js · GitHub で公開されました。

それがマージされ、Ember 3.28 にバックポートされたら、できるだけ早く Discourse に適用することを目指します。

「いいね!」 3

バックポート?!それは素晴らしいニュースだと思っていました!

この件をまとめてくれたデビッドさん、ありがとうございます!

この修正は Ember 3.28.12 の一部としてリリースされ、Discourse を更新して使用するようにしました。最新の Discourse に更新した後も modifyClass で問題が発生している場合は、お知らせください。

「いいね!」 6

素晴らしいデビッド、どうもありがとう!

「いいね!」 2

このトピックは9日後に自動的に閉じられました。返信はもうできません。