gpt4 book ai didi

javascript - 在 Ember 中表示模型的数组

转载 作者:行者123 更新时间:2023-12-03 08:39:41 24 4
gpt4 key购买 nike

我正在使用 SoundCloud 的 API 编写一个音乐播放器组件,其中包含 SoundCloud 中最喜欢的歌曲

我想在上一首歌曲播放完后自动播放下一首最喜欢的歌曲。

这个想法是创建一个新属性来表示我所有收藏夹的数组,以传递 nextFavorite

这是我的播放器 Controller

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);
}
}
}
}
}
}

当我创建一个新属性“favorites”的别名时,它是未定义的

enter image description here

如果我为单个收藏夹创建别名,我可以访问我的单个收藏夹,尽管这不是我需要做的

enter image description here

我的问题是最喜欢的模型没有指向 DS.ModelDS.hasMany

所以我不知道如何计算

这是最喜欢的模型

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;

那么,sortedFavorites 如何成为我所有收藏夹的数组,以便访问 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,
});
},
});

最佳答案

看起来收藏夹并没有真正定义?

也许可以在模型上创建一个别名(如果您想要别名),或者如果不需要,则创建一个副本?

此外,您不必从 setupController 返回 Controller ..

尝试在收藏夹 Controller 上设置模型?

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

在您的设置 Controller 中,因此您不需要第二个别名。

如果这不起作用,您还可以尝试让播放器 Controller 访问音乐 Controller (我假设那是音乐 Controller )添加:

needs : 'music'

然后您应该可以访问音乐 Controller :

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

到播放 Controller ,您应该可以访问音乐模型,它看起来像您最喜欢的..

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

关于javascript - 在 Ember 中表示模型的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33086653/

24 4 0
文章推荐: javascript - 如何在 angularJS 中访问