如何在 ember 中启用 ds-rollback-attribute?

How to enable ds-rollback-attribute in ember?

Ember 具有与默认方法 rollbackAttributes() 非常相似的方法 rollbackAttribute()。不同之处在于 rollbackAttribute() 只能用于回滚特定模型属性。 默认情况下,此方法不可用,要使用它,您需要启用 ds-rollback-attribute 和 运行 金丝雀构建,如下所示:https://docs.w3cub.com/ember/classes/ds.model/methods/#rollbackAttribute

在哪里可以启用 ds-rollback-attribute 以及如何 运行 canary build

我担心您正在查看非官方和过时的 API 文档。 Ember 数据的 API 文档托管于此处:https://api.emberjs.com/ember-data/release

最新版本不再记录 rollbackAttribute() 方法,在撰写本文时为 3.13。这是 last documented for 3.1. I think it was removed as a stale feature flag in this PR: [FEAT] remove all stale feature flags #5384

其实rollbackAttribute()的实现很简单。 我们可以创建自己的方法并将其提取到 service.

app/services/rollback-attribute.js

import Ember from 'ember';

export default Ember.Service.extend({
  rollback(model, attribute) {
    const changedAttributes = model.changedAttributes();
    if (changedAttributes[attribute]) {
      model.set(attribute, changedAttributes[attribute][0]);
    }
  }
});

创建此服务后,您可以在 route.js

中使用它
import Ember from 'ember';
import service from 'ember-service/inject';

export default Ember.Route.extend({
  rollbackAttribute: service('rollback-attribute'),

  _rollbackAttribute(model, attribute) {
    this.get('rollbackAttribute').rollback(model, key);
  },
});