2015-10-12 4 views
0

Je vous écris un lecteur de musique composant avec des chansons favoris de SoundCloud en utilisant leur APIReprésenter un tableau d'un modèle de Braise

Je veux jouer automatiquement la prochaine chanson préférée une fois que la précédente est terminée.

L'idée est de créer une nouvelle propriété pour représenter un tableau de tous mes favoris pour passer le nextFavorite

Ceci est mon contrôleur de lecteur

sortedFavorites: Ember.computed.alias('favorites’), 

et

actions: { 
    selectFavorite: function(favorite, index, play) { 
      if (!this.get('externalPlay')) { 
       index = index + 1; 
       nextFavorite = this.get('sortedFavorites').nextObject(index, favorite); 
       self.set('nextFavorite', nextFavorite); 
      } 
      return SC.stream(favoritePath, { 
       onfinish: function() { 
        self.set('isPlaying', false); 
        if (self.get('nextFavorite') != null) { 
         return self.send('selectFavorite', self.get('nextFavorite'), index); 
        } 
       } 
      } 
     } 
    } 
} 

Quand je créer une nouvelle propriété l'alias pour "favoris", il est indéfini

enter image description here

Dans le cas où je crée un alias pour un seul favori, je peux accéder à mon seul favori même si ce n'est pas ce que je dois faire

enter image description here

Mon problème est que le modèle préféré ne pas ont DS.hasMany pointant vers un DS.Model

donc je ne sais pas comment le figurer

C'est le modèle préféré deAlors comment les triededFavorites peuvent-ils être un tableau de tous mes favoris pour accéder à nextObject (favori)?

La Route

var MusicRoute = Ember.Route.extend({ 
    needs: ['player'], 
    player: Ember.computed.alias('controllers.player'), 
    beforeModel: function() { 
     return SC.initialize({ 
      client_id: window.soundcloud_api_key, 
      redirect_url: '#' 
     }); 
    }, 
    model: function(params) { 
     var artist, self, ret; 
     self = this; 
     artist = params.artist; 
     ret = []; 
     this.controllerFor('application').set('artistName', artist); 

     return new Ember.RSVP.Promise(function(resolve, reject) { 
      return SC.get("https://stackoverflow.com/users/" + 'mannaio' + "/favorites", { 
       limit: 40 
      }, function(favorites) { 
       if (favorites.length) { 
        favorites.forEach(function(item) { 
         var favorite; 
         favorite = self.createFavoritelist(item); 
         ret.push(favorite); 
         favorite.user = self.createUser(item.user); 
        }); 
        resolve(ret);     
       } else { 
        return reject(self.errorHandler(artist)); 
       } 
      }); 
     }); 
    }, 
    setupController: function(controller, model) { 
     var favorite ; 
     this._super(controller, model); 
     favorite = model.get('firstObject'); 
     this.controllerFor('player').set('favorite', favorite).send('selectFavorite', favorite, 0, false); 
     return controller; 
    }, 
    renderTemplate: function() { 
     this._super(); 
     return this.render('player', { 
      into: 'music', 
      outlet: 'player', 
      controller: 'player' 
     }); 
    }, 
    createFavoritelist: function(favorite) { 
     return this.store.createRecord('favorite', { 
      id: favorite.id, 
      title: favorite.title, 
      duration: favorite.duration, 
      uri: favorite.uri, 
      artwork_url: favorite.artwork_url, 
      genre: favorite.genre, 
     }); 
    }, 
    createUser: function(user) { 
     return this.store.createRecord('user', { 
      username: user.username, 
      avatar_url: user.avatar_url, 
     }); 
    }, 
}); 
+0

Pouvez-vous s'il vous plaît fournir plus d'entrée dans ce qui est « favoris »? l'alias fonctionne probablement, il pourrait être un problème avec ce que «favoris est» pouvez-vous peut-être également ajouter votre modèle crochet du routeur ici? –

+0

Le modèle est accroché avec un modèle de promesse: function (params) { return new Ember.RSVP.Promise (fonction (resolve, reject) { return SC.get ("/ users /" + 'mannaio' + "/ favoris ", { limite: 40 } – Koala7

+0

SC Si vous utilisez des données Ember, pourquoi n'appelez-vous pas simplement le magasin? Pouvez-vous également coller votre code de routeur ci-dessus? –

Répondre

1

ressemble favoris est pas vraiment défini?

Peut-être faire un alias sur le modèle (si vous voulez un alias) ou une copie si non?

vous n'avez pas à retourner un contrôleur de setupController ..

essayer la mise en place du modèle sur le contrôleur de favoris?

self.controllerFor('player').set('favorites', model); 

Dans votre contrôleur d'installation, vous n'avez donc pas besoin du second alias.

Si cela ne fonctionne pas, vous pouvez aussi essayer d'avoir l'accès au contrôleur de lecteur le contrôleur de la musique (je suppose que c'est le contrôleur de la musique) Ajouter:

needs : 'music' 

qui alors vous devriez avoir accès à la musique contrôleur:

this.get('controller.music.model') -> favorites 

au contrôleur de jeu, et vous devriez avoir accès au modèle de musique, qui ressemble à vos favoris ..

http://guides.emberjs.com/v1.10.0/controllers/dependencies-between-controllers/

+0

SetupController est de configurer le premier favori dans mon composant de joueur une fois que le La page est chargée L'alias sur le modèle sortedFavorites: Ember.computed.alias ('model') renvoie null – Koala7