Мне также нужно получить имя пользователя, который отредактировал пост (в данном случае “nachocab”), но args.model — это объект Post, а не PostRevision.
import Post from "discourse/models/post";
Post.loadRevision(args.model.id, args.model.version).then((result) => {
const editorUsername = result.username;
doSomethingElse();
});
ОБНОВЛЕНИЕ @eviltrout Я думал, что разобрался с этим, но только что понял, что поскольку Post.loadRevision возвращает Promise, я не могу поместить его внутрь shouldRender():
import Post from 'discourse/models/post';
export default {
shouldRender(args, component) {
// возврат промиса не работает
return Post.loadRevision(args.model.id, args.model.version).then((revision) => {
return args.model.username !== revision.username;
});
},
};
Вы можете вынести это из коннектора в новый компонент, который вы вставите, и отображать состояние «Загрузка…», пока промис не будет выполнен. После этого вы вызовите set для значения и отобразите его.
Спасибо, Робин. Твой совет был именно тем, что мне нужно было.
Это работает, но я задумался, нужен ли прямой вызов ajax (когда я использовал путь коннектора, у меня был доступ к посту, но не к ревизии; теперь, когда я выбрал путь компонента, у меня есть доступ к ревизии, но нет доступа к посту )
{{! 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) => {
// показывать кнопку только если автор ревизии не является автором поста
this.set('isVisible', this.get('revisionAuthor') !== post.username);
});
}
});