RGJ
(Richard - Communiteq)
1
我正在尝试使用 CustomComponent 可选地替换帖子的简短操作描述。
但是,帖子未正确传递给值转换器。
核心代码
@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.args.post 而不是 this.post。
我一直在尝试一种变通方法,即无条件地添加组件并让它自己检查该做什么,但不幸的是,参数似乎也没有正确传递,因此变通方法和正常实现在这里都会失败:
<this.CustomComponent
@code={{this.code}}
@post={{this.post}}
@createdAt={{this.createdAt}}
@path={{this.path}}
@username={{this.username}}
/>
PostSmallAction 中有 code、createdAt 和 path 的 getter,但是(再次)this.post 不存在,并且 username() 似乎也有一个错误(this.args.post 中没有 action_code_who?),因此这些属性保持为空。
我找不到现有的“真实世界”实现。我真的是第一个使用这个的人吗?
2 个赞
RGJ
(Richard - Communiteq)
2
2 个赞
saquetim
(Sérgio Saquetim)
3
感谢您注意到这个问题。
你说得对;post 参数应该是 this.args.post 而不是 this.post。
这里的 username 有点误导。action_code_who 确实是正确的,但它被一些插件(如 assign 插件)使用,所以它并不总是在 post 对象中。要获取创建此小动作的用户,您可以使用 @post.username。
我不确定是否可以将更改推送到您的 PR,所以我打开了下面的 PR 来解决这些问题:
- 修复传递给 transformer 和自定义组件的 post 参数
- 将
username 参数重命名为 who,以尽量减少围绕此参数的混淆
- 添加测试以验证参数是否正确传递
saquetim
(Sérgio Saquetim)
4
我认为你是。
据我所知,旧 API 没有在我们跟踪的 all-the-* 存储库的任何自定义中被使用。我只添加了这一个,以防有自托管者在使用它。
RGJ
(Richard - Communiteq)
5
太棒了!
嗯,感谢您的积极主动 
我认为 discourse-encrypt 曾经使用过它,还有三个(!)我们正在维护的私人插件。
感谢您的解释,我之前不明白它是如何工作的,现在明白了。
最后一个请求:您的修复能否也向后移植到稳定版?
saquetim
(Sérgio Saquetim)
关闭
7
此主题在上次回复后 24 小时自动关闭。不再允许回复。