我正在使用他们的API
编写一个音乐播放器组件,其中包含来自SoundCloud的收藏歌曲我希望在上一首歌完成后自动播放下一首喜欢的歌曲。
我们的想法是创建一个新属性来表示我所有收藏夹的数组以传递nextFavorite
这是我的播放器控制器
sortedFavorites: Ember.computed.alias('favorites’),
和
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);
}
}
}
}
}
}
当我为“收藏夹”创建新属性时,它是未定义的
如果我为单个收藏夹创建别名,我可以访问我的单个收藏夹,虽然这不是我需要做的事情
我的问题是,最喜欢的模型没有DS.hasMany
指向DS.Model
所以我不知道如何计算
这是最喜欢的型号
import DS from 'ember-data';
var Favorite = DS.Model.extend({
duration: DS.attr('string'),
title: DS.attr('string'),
genre: DS.attr('string'),
artwork_url: DS.attr('string'),
uri: DS.attr('string'),
users: DS.hasMany('user')
});
export default Favorite;
那么sortedFavorite怎么能成为我所有收藏夹的数组才能访问nextObject(最喜欢的)?
路线
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("/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 :(得分:1)
看起来收藏夹没有真正定义?
也许在模型上做一个别名(如果你想要一个别名)或者一个副本,如果没有?
此外,您不必从setupController返回控制器..
尝试在收藏夹控制器上设置模型?
self.controllerFor('player').set('favorites', model);
在您的设置控制器中,您不需要第二个别名。
如果这不起作用,您也可以尝试让播放器控制器访问音乐控制器(我认为这是音乐控制器) 添加:
needs : 'music'
然后你应该有权访问音乐控制器:
this.get('controller.music.model') -> favorites
到播放控制器,你应该可以访问音乐模型,它看起来像你最喜欢的..
http://guides.emberjs.com/v1.10.0/controllers/dependencies-between-controllers/