Accéder aux variables dans un connecteur

Je suis excellent en administration système. Je ne suis pas mauvais pour faire des choses avec Rails. Avec JavaScript, Ember et CSS, je suis un vrai primitif.

Dans un plugin qui modifie qui peut envoyer des MP, j’essaie d’ajouter un bouton sur la page de profil lorsque l’utilisateur n’a pas la permission d’envoyer un MP. Je peux ajouter du texte exactement là où je le veux en mettant des éléments dans assets/javascripts/discourse/templates/connectors/user-summary-stat/my-clever-name.hbs. (C’était une grande joie !).

Je vois que https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/templates/user/messages.hbs#L3 utilise

    {{#if showNewPM}}

J’aimerais utiliser cela dans my-clever-name.hbs, mais cette variable n’est pas définie.

Je pense qu’il faut peut-être créer un fichier my-clever-name.js.es6 dans le même répertoire que mon fichier hbs et inclure… quelque chose, et/ou ajouter du code qui définit cette variable afin que je puisse y accéder, mais j’ai relu le guide pour les développeurs plusieurs fois et j’ai essayé d’imiter le code de certains plugins qui semblent faire la même chose, sans réussir à voir exactement comment faire cela.

2 « J'aime »

Bonjour Jay,

J’ai entendu des gens dire qu’EmberJS est « un langage en soi » !

Ce dont vous avez besoin est une propriété calculée :

Bien que la syntaxe source de Discourse soit quelque peu différente, tout comme les importations, il est préférable de chercher un exemple. Voici un extrait de mon code :

https://github.com/paviliondev/discourse-zspace/blob/cc8893c14a9b1c5d4f6552f8f6b12ea9ac7ac643/assets/javascripts/discourse/components/activity-file-edit.js.es6#L10

2 « J'aime »

Donc, @discourseComputed("uploading") permet d’utiliser uploading dans un modèle hbs ? Un peu comme ceci dans Ember :

fullName: computed('firstName', 'lastName', function() {
    return `${this.firstName} ${this.lastName}`;
  })

Je vais donc créer assets/javascripts/discourse/components/my-plugin.js.es6 et étendre… quelque chose… ? Il semblerait qu’il existe un moyen d’activer simplement les mêmes variables auxquelles l’autre modèle que j’étends a accès. AH ! Peut-être qu’étendre cette chose dans mon composant rendrait ces variables disponibles pour moi ?

Devrais-je abandonner pour l’instant, faire marche arrière et passer une semaine sur le tutoriel Ember ?

Donc, cela configure une propriété calculée nommée ‘fullName’, qui se met à jour chaque fois que ‘firstName’ ou ‘lastName’ changent. Elle prend la valeur du retour.

1 « J'aime »

Merci pour votre patience !

Je pense avoir compris, mais ce que je ne comprends pas, c’est comment créer des valeurs accessibles dans mon modèle.

assets/javascript/discourse/components/user-private-messages.js.es6 :

import discourseComputed from "discourse-common/utils/decorators";
import User from "discourse/controllers/user";

export default Ember.Component.extend(User, {
    classNames: ["restrict-pms"],
    myFunThing: "this is text in my fun thing",
    @discourseComputed("myvalue")
    someThing(myvalue) {
        return true;
    }
});

Template.registerHelper("log", function(something){
    console.log(something);
});

Je pense que ce que je demande, ce qui peut sembler absurde, c’est ce que je peux mettre dans assets/javascripts/discourse/templates/connectors/user-profile-controls/add-link-to-subscription.hbs pour accéder à myFunThing ou myvalue ?

Le modèle correspondant à votre composant JS peut faire référence à votre propriété calculée simplement en l’incluant entre doubles accolades :

{{fullName}}

1 « J'aime »

Le code ci-dessus se trouve dans assets/javascript/discourse/components/user-private-messages.js.es6.

Je souhaite pouvoir utiliser {{myFunThing}} et/ou {{myvalue}} dans assets/javascripts/discourse/templates/connectors/user-profile-controls/add-link-to-subscription.hbs, mais cela renvoie une valeur indéfinie.

Je pense que l’un de ces fichiers est mal placé (je constate que d’autres textes dans le fichier hbs ci-dessus sont bien affichés sur /u/username/summary, mais sans myFunThing), ou que j’importe la mauvaise classe et/ou que j’étends le mauvais composant.

Désolé, Jay, je suis un peu débordé, mais ce que tu peux faire, c’est simplement connecter ton composant dans le fichier HBS du connecteur, par exemple :

{{my-component}}

(ajoute les arguments si nécessaire)

Il ira ensuite chercher my-component.hbs dans templates/components et /components.

Sinon, tu devrais pouvoir définir la propriété dans le fichier JS du répertoire du connecteur, mais pour ma part, je préfère la première approche.

2 « J'aime »

Je sais que cela date d’il y a un an, mais avez-vous jamais réussi à résoudre ce problème, @pfaffman ?

J’espère que ce n’était pas pour le même projet (inachevé), mais voici :

https://github.com/pfaffman/discourse-pfaffmanager/blob/master/assets/javascripts/discourse/templates/pfaffmanager-servers-show.hbs

Cela appelle :

https://github.com/pfaffman/discourse-pfaffmanager/blob/master/assets/javascripts/discourse/templates/components/server-item.hbs

Et, je pense :

https://github.com/pfaffman/discourse-pfaffmanager/blob/master/assets/javascripts/discourse/controllers/pfaffmanager-servers-show-item.js.es6

1 « J'aime »