簡體   English   中英

Ember.js:無法將原始數組轉換為Ember數組

[英]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
    });
  }),
});

灰燼路由(數據來自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); 什么都不做。 只是刪除此。

接下來,如果您不禁用數組的原型擴展,則不需要普通數組轉換為余燼數組。 因此,請替換為:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM