イニシャライザーにこのコードがあり、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
david
(David Taylor)
4
サンプルは機能するはずですが、安定版リリースと現在との間に、関連する変更があったとは認識していません。もし問題が再現できた場合は、お知らせください!
「いいね!」 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 氏も親切にこの問題を調査し、同様の結果を再現できました。
これは少し問題です。明らかに本番に上げる前に開発を進める必要があるからです…でも、それは言うまでもありませんね!
また、Stable バージョンで問題が発生しているのも少し厄介です。
一時的に Contribute > Bug に移動しました…
「いいね!」 2
OK、ここでの問題はさらに確実になりました…スタックトレースで mergeMixins が言及されているためです。
(これを見つけてくれた @RGJ さん、ありがとうございます)
「いいね!」 4
david
(David Taylor)
10
素晴らしい調査です - @merefield と @RGJ さん、ありがとうございます。
Discourse 内でこれを修正するには、あまり多くのことはできないと思います。指摘されたように、問題は Ember のアップストリームにあるようです。問題のあるメソッドをパッチできるかもしれませんね 
開始するために、進捗を追跡できるように、最小限の失敗するテストケースを追加しました。テストには、modifyClass システムによって問題がトリガーされる理由を説明するコメントがいくつかあります。
「いいね!」 4
ええ、あなたの努力にも感謝します。その問題が未解決のままになっているのは奇妙ですね? (Ember) 4.x で解決されるかご存知ですか?
david
(David Taylor)
12
残念ながら、Ember 4.x でも問題はまだ存在するようです 
「いいね!」 1
おかしいことに、Emberプロジェクトではそれが唯一の進歩のようです。関連するPRはまだドラフト中です。時間があれば、優先順位を付けるよう丁寧に依頼するだけで十分かもしれません。
これは第三者のスタッフメンバーによって開かれたものであることを十分に理解しています。
GitHub - emberjs/ember.js: Ember.js - A JavaScript framework for creating ambitious web applications で、このPR、このトピック、そしてあなたのテストを参照して、問題を提起する価値はありますか?
david
(David Taylor)
14
はい、私のテストはそれらに基づいています(ただし、ディスコース固有のapi.modifyClass APIを使用しています)。新しいイシューを開くべきではないと思います。これは、すでに開いているものと100%同じです。優先度を上げるために何かできるかどうか見てみましょう。
「いいね!」 3
david
(David Taylor)
15
「いいね!」 3
バックポート?!それは素晴らしいニュースだと思っていました!
この件をまとめてくれたデビッドさん、ありがとうございます!
david
(David Taylor)
18
この修正は Ember 3.28.12 の一部としてリリースされ、Discourse を更新して使用するようにしました。最新の Discourse に更新した後も modifyClass で問題が発生している場合は、お知らせください。
「いいね!」 6
david
(David Taylor)
クローズされました:
20
このトピックは9日後に自動的に閉じられました。返信はもうできません。