7
votes

Comment copier un enfant d'un nœud à un autre?

Situation: strong>

J'aurais besoin de télécharger l'enfantNode, puis de la définir () dans l'autre nœud. p>

problème est que je veux faire cela seulement une fois le L'attribut de score de ChildNode atteint 100. P>

où et quand dois-je vérifier si les messages ont un score de 100 ou plus et comment puis-je les copier à la nouvelle index une seule fois? p>


Ce que je pensais: strong> p>

Lorsqu'un poste est chargé, vérifiez que c'est le score. Si c'est> = 100, enregistrez la base de données si c'est le cas. Puis appuyez sur le nœud sur le nouvel index. p>


Problème: strong> p>

Comment puis-je empêcher le nœud d'être téléchargé chaque fois que le poteau est chargé depuis son score est> = 100 sur plusieurs charges ? J'ai besoin que cela ne se produise qu'une seule fois! P>


Code de la solution: strong> p>

if (funPost.score >= global.hotNumber && funPost.hot == false) {
            var hotPostRef = firebase.database().ref("hot/section/"+key);
            var hotPost = {
                title: funPost.title,
                image: funPost.image,
                id: funPost.id,
                key: funPost.key
            }
            hotPostRef.set(hotPost);
            funPostRef.update({"hot": true});
        }
   else if (funPost.score <= (global.hotNumber - 25) && funPost.hot == true) {
        var hotPostRef = firebase.database().ref("hot/section/"+key);
        hotPostRef.remove();
        funPostRef.update({"hot": false});
   }


4 commentaires

Vous semblez construire le > = 100 index lorsque vous êtes lecture les données. Y a-t-il une raison à cela? Avez-vous envisagé de construire l'index lors de la rédaction des données? Y a-t-il une raison pour laquelle vous ne pouvez pas? Cela est relativement simple.


Si vous ajoutez un observateur au nœud contenant le score, il informera votre application lorsqu'il sera mis à jour. Donc, quand il notifie votre application, vérifiez si c'est 100 et si oui, téléchargez le nœud, le score à 0 et effectuez la copie. Si c'est une offre d'un coup, vous pouvez simplement avoir votre application Vérifier un nœud préférences contenant un nœud / wet_observe: true et observez uniquement le nœud de scores si cela est vrai, si faux, n'ajoutez pas d'observateur. Cependant, téléchargez tout le nœud et l'écriture de l'écriture semble être trop exclu. Pourquoi faites-vous cela?


@Jay Si vous regardez mon résolution (), vous verrez que je vais passer à l'ensemble de l'article pour afficher des informations sur la page suivante. Mais tout va bien: j'ai fini par utiliser un drapeau booléen. Postera mon code ce soir.


@Cartant j'ai pensé à ça. Mais le moment où j'écris des données est généré par le client. Je préfère masquer l'algorithme pour obtenir des messages dans la section supérieure de mon code serveur. Par conséquent, pourquoi je vérifie la charge :)


3 Réponses :


0
votes

essayez d'utiliser .once () au lieu de .on () . xxx


7 commentaires

C'est précisément ce que j'avais déjà pensé. Mais il sera toujours déclenché chaque fois que la page est chargée.


Sur le côté serveur, lorsque la page est chargée, le score du post est le score. Si le score est> = 100, puis définissez le message sur un nouvel emplacement. Normalement, j'utiliserais un drapeau booléen pour m'assurer que cela ne se produit qu'une fois, mais je ne vois pas où je le mettit ici ici: /


Si le score perd sa valeur sur rafraîchir, vous devez l'enregistrer dans une base de données et l'afficher à partir de là, surtout sur le côté serveur.


Comment cela a-t-il quelque chose à voir avec ma question? En outre, c'est déjà comment mon site Web est codé.


Il devrait y avoir une solution de contournement, mais jusqu'à ce que je voie un code source, il sera difficile de le comprendre. J'ai quelque chose dans mon esprit avec Socket.io


Est-ce que c'est une application de page unique? Comme l'utilisateur de l'utilisateur y travaille pendant un certain temps. Et une fois que le score de Post est supérieur à 100, l'opération doit être effectuée. Pourriez-vous suivre le score de poste actuel? Et quand FunPostonThePage.Score <100 et Funpost> 100 déclencher une action? BTW: Que devrait-on faire si le score passe en dessous et à nouveau?


@Eugenelisitsky j'ai fini par utiliser un drapeau booléen. Trouvé un moyen de rendre cela efficace. Postera le code ce soir.



1
votes

J'ai fini par le faire avec un drapeau booléen: xxx


0 commentaires

-1
votes

https://gist.github.com/katowulf/6099042 Est la façon dont vous copiez ou déplacez-la réfer à une autre réf.

Comment puis-je empêcher le nœud d'être téléchargé à chaque fois que le poteau est chargé depuis son score est> = 100 sur plusieurs charges? J'en ai besoin pour se passe seulement une fois!

1) Utilisez des règles de boulon pour échouer l'écriture si la touche de chemin d'accès existe déjà () dans le nouvel emplacement.

2) Qu'est-ce qui cause le score à monter? par exemple. Enquête terminée, examen terminé Ces événements devraient être envoyés à la file d'attente Firebase pouvant exécuter une série de pipelines pour mettre à jour tout ce dont vous avez besoin.


0 commentaires