Как получить доступ к другой модели в коннекторе?

Я почти добрался до цели, но не могу разобраться. Я создал коннектор здесь: connectors/revision-user-details-after:

В классе коннектора я могу получить доступ к args и component через метод shouldRender, что позволяет мне узнать текущее имя пользователя и ID поста:

export default {
  shouldRender(args, component) {
    console.log('postAuthor', args.model.username)
    console.log('postId', args.model.id)
  }
};

Мне также нужно получить имя пользователя, который отредактировал пост (в данном случае “nachocab”), но args.model — это объект Post, а не PostRevision.

Вот как выглядит модальное окно истории:

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/templates/modal/history.hbs#L5

А вот контроллер истории:

https://github.com/discourse/discourse/blob/main/app/assets/javascripts/discourse/app/controllers/history.js#L74

Как можно получить доступ к ревизии внутри коннектора?

Ах, я только что понял, что могу это сделать!

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 для значения и отобразите его.

Спасибо, Робин. Твой совет был именно тем, что мне нужно было. :tada:

Это работает, но я задумался, нужен ли прямой вызов ajax (когда я использовал путь коннектора, у меня был доступ к посту, но не к ревизии; теперь, когда я выбрал путь компонента, у меня есть доступ к ревизии, но нет доступа к посту :thinking:)

{{! templates/connectors/revision-user-details-after/reply-to-editor.hbs }}
{{reply-to-editor
  postId=model.post_id
  postVersion=model.current_version
  revisionAuthor=model.username
}}
{{! templates/components/reply-to-editor.hbs }}
{{#if isVisible}}
  {{d-button
    action=(action 'replyToEditor')
    label='test'
  }}
{{/if}}
{{! 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);
    });
  }
});

Не совсем понятно, почему у вас нет доступа к тем же переменным в шаблоне, что и в коннекторе. Это должно быть идентично!