Ember.js 如何在控制器中迭代Ember.PromiseArray
如何在另一个模型的hasMany关系中找到记录?我可能把事情复杂化了,但这里有一个简短的例子 两种型号,用户和播放列表-用户可以选择喜爱的播放列表 我想更改“收藏”按钮,以允许用户“不喜欢”。为此,我需要检查播放列表路由上的当前播放列表型号是否在user.favoritePlaylist数组中,以更改收藏夹按钮 这将在playlist.hbs中工作并自动解析:Ember.js 如何在控制器中迭代Ember.PromiseArray,ember.js,Ember.js,如何在另一个模型的hasMany关系中找到记录?我可能把事情复杂化了,但这里有一个简短的例子 两种型号,用户和播放列表-用户可以选择喜爱的播放列表 我想更改“收藏”按钮,以允许用户“不喜欢”。为此,我需要检查播放列表路由上的当前播放列表型号是否在user.favoritePlaylist数组中,以更改收藏夹按钮 这将在playlist.hbs中工作并自动解析: {{#each playlist in user.playlistFavorites}}{{playlist.title}}{{/eac
{{#each playlist in user.playlistFavorites}}{{playlist.title}}{{/each}}
但在我的控制器中,相同的属性无法解析,因为据我所知,它是一个Ember.PromiseArray。如何判断用户是否已经喜欢该播放列表
模型如下所示:
// models/user.js
export default DS.Model.extend({
name: DS.attr('string'),
playlists: DS.hasMany('playlist', {async: true }),
favoritePlaylists: DS.hasMany('playlist', { inverse: null, async: true })
});
// models/playlist.js
export default DS.Model.extend({
title: DS.attr('string'),
tracks: DS.hasMany('track', { async: true }),
user: DS.belongsTo('user', { inverse: 'playlists' })
});```
我在这里尝试了一些伪代码,但运气不好
isFavorite: function() {
var playlist = this.get('model');
var userFavs = this.get('auth.user.favoritePlaylists');
if (userFavs.contains(playlist) {
// playlist already a favorite
}
}.property('model', 'auth.user')
播放列表路由器由Ember生成。我有一个名为“auth”的初始值设定项,我在登录后将“user”属性设置为用户模型,这样我就可以这样做。在播放列表控制器上获取“auth.user”。身份验证初始值设定项设置为在“store”之后运行,并注入到每个路由和控制器中。由于favoritePlaylist是异步的,因此计算属性需要随着异步属性的更新而更新。您可以观看favoritePlaylists更新记录的添加或删除,这将允许它在关系异步更新时进行更新
isFavorite: function() {
var playlist = this.get('model');
var userFavs = this.get('auth.user.favoritePlaylists');
return userFavs.contains(playlist);
}.property('model', 'auth.user.favoritePlaylists.[]')
您介意添加路由/控制器/模板吗?我正试着把我的头脑放在这里。从这里的一个模板创建一个示例会更好谢谢,在路由器、控制器以及如何通过我的“auth”初始值设定项访问用户上添加了一条说明。谢谢,非常接近了。但是,在迭代之前,我需要检查收藏夹是否确实存在。我附上了一个工作示例。我怎样才能把它写得更短/更好?你能避免有条件的支票吗?