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
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
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,
});
},
});
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? –
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
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? –