Мне тоже нужна эта функциональность. Сейчас я делаю это вот так, но это занимает слишком много времени.
const selectedTopics = this.selectedTopics
// Получаем темы по ID и возвращаем реальные объекты тем
this.selectedTopicsID.forEach(function(tid,index){
Topic.find(tid,{}).then(results => {
selectedTopics.pushObject(results)
})
});
Я собирался переоткрыть listcontroller в моем плагине (plugin.rb), добавить новый endpoint, а также переоткрыть topic-list в инициализаторе фронтенда и сделать что-то похожее на это:
https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/models/topic-list.js.es6#L129
Но surely должен быть более простой способ. Действительно ли пока нет endpoint для массовой загрузки тем по ID?
Буду очень благодарен за любую помощь ![]()
РЕДАКТИРОВАНИЕ: Вот как я решил эту проблему для себя:
Вот как этим можно воспользоваться.
import TopicList from 'discourse/models/topic-list';
const selectedTopics = this.selectedTopics
// Получаем темы по ID
TopicList.topics_array(this.selectedTopicsID).then(results => selectedTopics.pushObjects(results.topic_list.topics))
Пока что у этого подхода есть недостаток: он не возвращает «реальные» объекты Topic, но, думаю, добавление строки, подобной этой, исправит ситуацию:
Я всё ещё не уверен, что это правильный подход и/или не нарушает ли это безопасность.
Ещё один возможный вариант: сначала проверить в store, есть ли уже запись, и загрузить только то, чего нет, используя fromMap. Похоже на:
В любом случае, здесь становится слишком многословно ![]()
Вот моё окончательное решение, на этом я остановлюсь: