2017-09-17 3 views
0

Salut, je suis un peu confus comment fonctionne braise, j'ai une application que je crée qui est de lister les tâches pour un utilisateur particulier. Voici mon modèle:Reload ember modèle

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    title: DS.attr('string'), 
    location: DS.attr('string'), 
    date: DS.attr('date'), 
    archive: DS.attr('boolean'), 
    user: DS.attr('string'), 
}); 

C'est pour quand j'ajoute une tâche à la liste des tâches. Cependant quand je reçois toutes les tâches dans mon tasklist je l'utilise dans mon itinéraire:

model: function() {  
     return this.store.findAll('task'); 
    } 

Pour mon filtrage de tous les utilisateurs pour les tâches que j'ai ajouter à mon contrôleur:

filteredModel: Ember.computed('model', function(){ 
     let model = this.get('model'); 

     return model.filter(function(item){ 
      return item.data.user == this.get('session.user.email'); 
     }); 

    }), 

Tout cela fonctionne très bien. Toutefois, lorsque j'ajoute une nouvelle tâche à la liste des tâches, elle ne met pas à jour ma liste de tâches, je dois donc recharger ma page. Cela peut-il être fait automatiquement, sans actualiser ma page?

Répondre

1

Le tableau renvoyé par findAll est un tableau actif qui contient toujours tous les enregistrements du magasin. Cependant, votre PC a une mauvaise clé de dépendance. La clé de dépendance doit inclure .[] ou [email protected]?, ou elle n'écoutera pas sur les modifications de groupe. Parce que vous utilisez la propriété user, il doit être [email protected]. Aussi, vous devriez probablement ajouter l'utilisateur actuel à la clé de dépendance.

Enfin votre CP ne peut pas fonctionner du tout, car le this dans la fonction de filtre est le this de la fonction de filtre, pas le contrôleur. Vous devez utiliser une fonction de flèche ou enregistrer le this dans une variable.

Aussi item.data.user semble faux, probablement cela devrait être item.get('user').

Ainsi, le CP final est:

filteredModel: Ember.computed('[email protected]', 'session.user.email', function(){ 
    return this.get('model') 
     .filter(item => item.get('user') == this.get('session.user.email')); 
}), 
+0

Salut Lux J'ai une autre question au sujet Ember seriez-vous en mesure de le vérifier https://stackoverflow.com/questions/46276924/ember-js- formes imbriquées – jsg

+0

Peut-être que vous devriez vérifier le canal d'aide de braderie pour plus de discussion comme des questions. – Lux