Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 如何在控制器中迭代Ember.PromiseArray_Ember.js - Fatal编程技术网

Ember.js 如何在控制器中迭代Ember.PromiseArray

Ember.js 如何在控制器中迭代Ember.PromiseArray,ember.js,Ember.js,如何在另一个模型的hasMany关系中找到记录?我可能把事情复杂化了,但这里有一个简短的例子 两种型号,用户和播放列表-用户可以选择喜爱的播放列表 我想更改“收藏”按钮,以允许用户“不喜欢”。为此,我需要检查播放列表路由上的当前播放列表型号是否在user.favoritePlaylist数组中,以更改收藏夹按钮 这将在playlist.hbs中工作并自动解析: {{#each playlist in user.playlistFavorites}}{{playlist.title}}{{/eac

如何在另一个模型的hasMany关系中找到记录?我可能把事情复杂化了,但这里有一个简短的例子

两种型号,用户和播放列表-用户可以选择喜爱的播放列表

我想更改“收藏”按钮,以允许用户“不喜欢”。为此,我需要检查播放列表路由上的当前播放列表型号是否在user.favoritePlaylist数组中,以更改收藏夹按钮

这将在playlist.hbs中工作并自动解析:

{{#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”初始值设定项访问用户上添加了一条说明。谢谢,非常接近了。但是,在迭代之前,我需要检查收藏夹是否确实存在。我附上了一个工作示例。我怎样才能把它写得更短/更好?你能避免有条件的支票吗?