أنا قريب جدًا، لكنني لا أستطيع حل المشكلة. لقد أنشأت مُركّبًا هنا connectors/revision-user-details-after:
في فئة المُركّب الخاصة بي، يمكنني الوصول إلى args و component عبر دالة shouldRender، مما يسمح لي بالوصول إلى اسم المستخدم الحالي ومعرف المنشور:
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
كيف يمكنني الوصول إلى النسخة المراجعة داخل المُركّب؟
إعجاب واحد (1)
آه، لقد أدركت للتو أنه يمكنني فعل ذلك!
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;
});
},
};
هل هناك طريقة أخرى للقيام بذلك؟
يمكنك نقله من المكوّن الموصول إلى مكون جديد تقوم بإدراجه، وعرض حالة “جارٍ التحميل…” حتى يتم استيفاء الوعد، وعندها تُعيّن القيمة وتعرضها.
إعجاب واحد (1)
شكرًا لك، روبين. كانت نصيبتك هي ما كنت أحتاجه بالضبط. 
هذا يعمل، لكنني أتساءل عما إذا كان استدعاء ajax المباشر ضروريًا (عندما اتبعت مسار الموصل، كان لدي وصول إلى المنشور ولكن ليس إلى المراجعة؛ والآن بعد أن اتبعت مسار المكون، لدي وصول إلى المراجعة ولكن ليس إلى المنشور
)
{{! 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);
});
}
});
لست متأكدًا من سبب عدم حصولك على نفس المتغيرات في القالب كما في المكوّن الموصل. يجب أن يكونا متطابقين!