[英]Ember.js: Converting vanilla array into Ember array not working
我有一個要通過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
});
}),
});
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);
什么都不做。 只是刪除此。
接下來,如果您不禁用數組的原型擴展,則不需要將普通數組轉換為余燼數組。 因此,請替換為:
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
進行.forEach
操作,但是movieGenreId
現在可能仍然是一個數組。 接下來,您執行movieGenreId.toString()
(您實際上進行了movieGenreIds.toString()
,但是我認為這是一個錯字,因為這沒有意義,因為您movieGenreId
循環內使用movieGenreId
)。 但是,對數組執行.toString()
可能不會給您想要的結果-一個ID。
因此,可能的解決方法是修復movieGenreIds
CP(該代碼適用於余燼3.1+):
movieGenreIds: computed('movies.@each.genre_ids', function() {
return this.movies
.map(m => m.genre_ids)
.reduce((a, b) => [...a, ...b]);
}),
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.