Ember框架中按created_at字段排序数据的问题求助
解决Ember路由中按
created_at字段排序的问题 你遇到的排序问题大概率是数据源引用错误或日期字段类型不匹配导致的,我帮你一步步排查和修正:
1. 修正控制器中的数据源引用
在Ember中,路由通过findAll返回的模型数据,默认会注入到控制器的model属性中,而非你写的servicerequest。所以排序计算属性的第一个参数需要改为model:
import Controller from '@ember/controller'; import { sort } from '@ember/object/computed'; export default Controller.extend({ appName: 'Service Requests', sortAscending: false, sortDefinition: ['created_at:desc'], // 将'servicerequest'替换为'model',对应路由返回的模型数据 sortedRequests: sort('model', 'sortDefinition') });
2. 确保日期字段的类型正确
如果created_at返回的是字符串(比如ISO格式的日期字符串),直接排序可能出现异常。你需要在servicerequest模型中明确指定该字段类型为date,让Ember Data自动将其转换为Date对象:
// app/models/servicerequest.js import Model, { attr } from '@ember-data/model'; export default class ServiceRequestModel extends Model { @attr('date') created_at; }
3. (可选)适配Ember Octane及以上版本的写法
如果你使用的是较新的Ember版本(Octane及以后),推荐使用ES6类和追踪属性的写法,更符合现代Ember的最佳实践:
import Controller from '@ember/controller'; import { tracked } from '@glimmer/tracking'; import { sort } from '@ember/object/computed'; export default class ServiceRequestController extends Controller { appName = 'Service Requests'; @tracked sortDefinition = ['created_at:desc']; @sort('model', 'sortDefinition') sortedRequests; }
完成以上步骤后,sortedRequests应该就能按照created_at字段降序排序了。如果仍有问题,可以检查:
- 确认路由确实返回了包含
created_at字段的servicerequest数据 - 查看浏览器控制台是否有属性未找到之类的报错信息
内容的提问来源于stack exchange,提问作者spacerobot
相关产品推荐
相关产品推荐

