イニシャライザーにこのコードがあり、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
Davidさん、これは(奇妙なことに)以下のようです。
- 本番環境では動作します。
- 開発環境 3.0.0 以降(それ以前の可能性もあり)では失敗します。
- Docker を使用しない純粋な開発環境でも、非常にクリーンな(ただし設定が不完全な可能性のあるカスタム Docker 開発環境)でもテストしました。
エラーは以下のとおりです。
エラーが発生しました:
- レンダリング中:
-トップレベル
アプリケーション
discourse-root
sidebar-wrapper
admin
admin-wrapper
nav-item
link-to
-link-to
(Promise でキャッチされませんでした) TypeError: ルート "adminPlugins" へのリンク生成中に:this.model が未定義です
get allAdminRoutes admin-plugins.js:20
return this.model の前にデバッガーステートメントを挿入しても、デバッガーが起動しないことに注意してください。
RGJ さんも親切にこれを確認してくれて、この結果を再現できるとのことです。
これは明らかに、本番環境にデプロイする前に開発する必要があるため、少々問題です…言うまでもありませんね!
また、Stable で問題が発生しているのも少々厄介です…
とりあえず 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日後に自動的に閉じられました。返信はもうできません。