In meiner Connector-Klasse kann ich über die Methode shouldRender auf args und component zugreifen, was mir den aktuellen Benutzernamen und die Post-ID liefert:
Ich möchte jedoch auch den Benutzernamen des Nutzers erhalten, der den Beitrag bearbeitet hat (in diesem Fall „nachocab“), aber args.model ist ein Post und keine PostRevision.
Ah, mir ist gerade aufgefallen, dass ich das machen kann!
import Post from "discourse/models/post";
Post.loadRevision(args.model.id, args.model.version).then((result) => {
const editorUsername = result.username;
doSomethingElse();
});
UPDATE @eviltrout Ich dachte, ich hätte das schon geklärt, aber mir ist gerade aufgefallen, dass ich Post.loadRevision, da es ein Promise zurückgibt, nicht in shouldRender() einbetten kann:
import Post from 'discourse/models/post';
export default {
shouldRender(args, component) {
// Das Zurückgeben eines Promises funktioniert nicht
return Post.loadRevision(args.model.id, args.model.version).then((revision) => {
return args.model.username !== revision.username;
});
},
};
Sie könnten es aus dem Connector in eine neue Komponente auslagern, die Sie einfügen, und einen “Laden…”-Zustand anzeigen lassen, bis der Promise erfüllt ist. Sobald dies der Fall ist, setzen Sie den Wert mit set und zeigen ihn an.
Danke, Robin. Dein Tipp war genau das, was ich brauchte.
Das funktioniert, aber ich frage mich, ob der direkte ajax-Aufruf notwendig ist (als ich den Connector-Pfad gewählt habe, hatte ich Zugriff auf den Post, aber nicht auf die Revision; jetzt, wo ich den Component-Pfad gewählt habe, habe ich Zugriff auf die Revision, aber nicht auf den Post )
{{! javascripts/discourse/components/reply-to-editor.js.es6 }}
import { ajax } from 'discourse/lib/ajax';
export default Ember.Component.extend({
isVisible: true,
didRender() {
if (!this.get('postId')) return;
ajax(`/posts/${this.get('postId')}`).then((post) => {
// zeige den Button nur, wenn der Autor der Revision nicht der Autor des Posts ist
this.set('isVisible', this.get('revisionAuthor') !== post.username);
});
}
});