RGJ
(Richard - Communiteq)
1
カスタムコンポーネントで投稿の小さなアクションの説明をオプションで置き換えようとしています。
しかし、投稿が値トランスフォーマーに正しく渡されていません。
コアコード
@cached
get CustomComponent() {
return applyValueTransformer("post-small-action-custom-component", null, {
actionCode: this.code,
post: this.post,
});
}
私のデバッグコード
api.registerValueTransformer(
"post-small-action-custom-component",
(arg) => {
console.log(arg);
}
);
出力:
context: Object { actionCode: "bid", post: undefined }
テストではパラメータがチェックされていないため、これは見過ごされています。
post パラメータは this.post ではなく this.args.post であるべきだと思います。
コンポーネントを無条件に追加し、それが何をするかを自分でチェックするようにして回避策を試しましたが、残念ながら引数も正しく渡されていないようです。そのため、回避策と通常のどちらの実装もここで失敗します。
<this.CustomComponent
@code={{this.code}}
@post={{this.post}}
@createdAt={{this.createdAt}}
@path={{this.path}}
@username={{this.username}}
/>
PostSmallAction には code、createdAt、path のゲッターがありますが、(再び)this.post は存在せず、username() にもバグがあるようです(this.args.post に action_code_who がありませんか?)そのため、これらの属性は空のままです。
既存の「実際の」実装が見つかりません。本当に私が最初にこれを使用しているのでしょうか? 
「いいね!」 2
RGJ
(Richard - Communiteq)
2
「いいね!」 2
saquetim
(Sérgio Saquetim)
3
この問題を指摘していただきありがとうございます。
おっしゃる通りです。postパラメータは this.post ではなく this.args.post であるべきです。
username はここでは少し誤解を招きます。action_code_who は確かに正しいですが、assign プラグインなどの一部のプラグインで使用されるため、常に post オブジェクトに存在するとは限りません。スモールアクションを作成したユーザーを取得するには、@post.username を使用できます。
あなたのPRに変更をプッシュできるか確信が持てなかったため、以下のPRを開き、これらの問題に対処しました。
- トランスフォーマーとカスタムコンポーネントの両方に渡されるpost引数を修正しました
- この引数に関する混乱を最小限に抑えるために、
username 引数を who にリネームしました
- 引数が正しく渡されていることを確認するためのテストを追加しました
saquetim
(Sérgio Saquetim)
4
そうだと思いますよ。
私の知る限り、古いAPIは all-the-* リポジトリで追跡しているカスタマイズでは使用されていませんでした。セルフホスティングしている人が使用している場合に備えて、代替手段を提供するためにこれを追加しました。
RGJ
(Richard - Communiteq)
5
素晴らしいです!
先見の明があって、ありがとうございます 
discourse-encrypt がそれを使用していたと思います。また、私たちが保守している 3 つ (!) のプライベートプラグインもそうです。
説明ありがとうございます。仕組みが理解できませんでしたが、今は理解できました。
最後に一つお願いがあります。この修正は安定版にもバックポートしていただけますか?
saquetim
(Sérgio Saquetim)
クローズされました:
7
このトピックは、最後の返信から24時間後に自動的にクローズされました。新しい返信は許可されていません。