Ember.js:将原版数组转换为 Ember 数组不起作用



我有一个数组,我正在使用A()转换为Ember数组,因为我想使用一些Ember数组方法,例如filterBy(),但它没有产生我想要的结果。将原版数组转换为Ember数组的正确方法是什么?

余烬:

import Component from '@ember/component';
import { computed } from '@ember/object';
import { A } from '@ember/array';
export default Component.extend({
movieGenreIds: computed.map('movies', function(movie, index) {
return movie.genre_ids;
}),
genresNames: computed('movieGenreIds', 'allGenres', function() {
let genresArray = A(this.get('genres')); // <--- conversion here
this.get('movieGenreIds').forEach((movieGenreId, movieGenreIndex) => {
console.log('MOVIE_GENRE_IDS!!!', genresArray);
console.log('FILTERBY ID^^^', genresArray.filterBy('id', movieGenreIds.toString())); // <-- not returning desired results
});
}),
});

余烬路由(数据来自 moviedb api,models表示所提供json中的数据结构(:

import Route from '@ember/routing/route';
import RSVP from 'rsvp'
export default Route.extend({
model() {
return RSVP.hash({
movies: this.store.findAll('movie'),
genres: this.store.findAll('genre'),
})
.then(data => data);
},
});

好吧,首先.then(data => data);实际上什么都没有。只需删除它。

接下来,如果您不禁用数组的原型扩展,则无需将普通数组转换为ember 数组。 所以替换这个:

let genresArray = A(this.get('genres')); 

有了这个:

let genresArray = this.get('genres');

或者在 Ember 3.1+ 中:

let genresArray = this.genres;

现在一个有趣的问题是,movie模型genre_ids什么?我强烈假设它是一个返回数组的计算属性。但是一些代码会有所帮助。

但是,movieGenreIds的依赖项密钥是错误的。您可能应该这样做:

movieGenreIds: computed.map('movies.@each.genre_ids', function(movie, index) {
return movie.genre_ids;
}),

但是,您的实际问题现在可能是这可能会返回数组数组。所以像这样:

[[1,2],[3],[],[4,5]]

现在你.forEach它,但是movieGenreId现在可能仍然是一个数组。接下来你做movieGenreId.toString()(你实际上做movieGenreIds.toString(),但我认为这是一个错字,因为这没有意义,因为你在循环中不使用movieGenreId(。但是,对数组执行.toString()可能不会给您所需的结果 - id。

所以你的解决方法可能是修复movieGenreIdsCP(代码适用于 ember 3.1+(:

movieGenreIds: computed('movies.@each.genre_ids', function() {
return this.movies
.map(m => m.genre_ids)
.reduce((a, b) => [...a, ...b]);
}),

最新更新