You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ember技术问题:如何获取Route的Model返回数据的指定项

如何在Ember中获取指定的Rentals对象?

嘿,我来帮你理清这个问题——你之前的写法没成功,核心原因是**this.get('store').findAll('rentals')返回的不是普通数组,而是一个Promise**,它最终才会解析成Ember Data的DS.RecordArray(一个类数组的响应式对象)。所以你直接同步调用[0]、firstObject这些操作时,Promise还没完成,自然拿不到正确结果。

下面分场景给你解决方案:

1. 获取第一个或最后一个Rentals对象

方法一:用async/await(推荐,代码更简洁)

Ember的model钩子支持异步函数,用await等待Promise完成后再操作:

import Route from '@ember/routing/route';
export default Route.extend({
  async model() {
    // 等待findAll完成,拿到完整的RecordArray
    const rentals = await this.get('store').findAll('rentals');
    
    // 获取第一个对象
    return rentals.get('firstObject');
    // 如果要获取最后一个,换成下面这句
    // return rentals.get('lastObject');
  }
});

方法二:用Promise的then链式调用

如果你的项目还不支持async/await,可以用then来处理异步结果:

import Route from '@ember/routing/route';
export default Route.extend({
  model() {
    return this.get('store').findAll('rentals').then(rentals => {
      // 在回调里操作已解析的RecordArray
      return rentals.get('firstObject');
      // 获取最后一个则用:return rentals.get('lastObject');
    });
  }
});

2. 获取多个指定项(比如前2个、特定索引的项)

先拿到解析后的RecordArray,然后用toArray()把它转换成普通JavaScript数组,之后就能用标准数组方法(slice、索引访问等)操作了:

import Route from '@ember/routing/route';
export default Route.extend({
  async model() {
    const rentals = await this.get('store').findAll('rentals');
    // 转换成普通数组
    const rentalsArray = rentals.toArray();
    
    // 获取前2个对象
    return rentalsArray.slice(0, 2);
    // 或者获取指定索引的多个项,比如第1个和第3个
    // return [rentalsArray[0], rentalsArray[2]];
  }
});

为什么你之前的写法失败?

再帮你复盘下:

  • return this.get('store').findAll('rentals')[0]:此时findAll返回的是Promise,不是数组,所以[0]拿到的是undefined。
  • return this.get('store').findAll('rentals').get(0):Promise对象没有get方法,直接报错。
  • return this.get('store').findAll('rentals').firstObject:Promise上不存在firstObject这个属性,自然拿不到值。

只有等Promise完成,拿到真正的DS.RecordArray后,才能调用这些属性或方法哦~

内容的提问来源于stack exchange,提问作者AmazingDayToday

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:49:05