【问题标题】:Error "str.replace is not a function" when using store.queryRecord with Ember Octane将 store.queryRecord 与 Ember Octane 一起使用时出现错误“str.replace 不是函数”
【发布时间】:2021-04-05 15:10:04
【问题描述】:

我正在关注Embercasts 课程(Ember + Rails)。对于截屏视频,他们使用的是 Ember 3.0,但我使用的是 Octane。

在一个视频中,实现了自定义服务。这是我的版本的样子:

import Service, { inject as service } from '@ember/service';

export default class CurrentUserService extends Service {
  @service store;

  load() {
    this.store.queryRecord('user', { me: true })
      .then((user) => {
        this.set('user', user);
      })
      .catch((e) => {
        debugger;
      });
  }
}

在从路由调用的load 函数中,this.store.queryRecord() 导致错误:

TypeError: str.replace is not a function
  at Cache.func (index.js:64)
  at Cache.get (index.js:774)
  at decamelize (index.js:167) 
  at Cache.func (index.js:32)
  at Cache.get (index.js:774)
  at Object.dasherize (index.js:190)
  at UserAdapter.pathForType (json-api.js:221)
  at UserAdapter._buildURL (-private.js:293)
  at UserAdapter.buildURL (-private.js:275)
  at UserAdapter.urlForQueryRecord (user.js:13)

相关行是

var DECAMELIZE_CACHE = new _utils.Cache(1000, str => str.replace(STRING_DECAMELIZE_REGEXP, '$1_$2').toLowerCase());

这是UserAdapter:

import ApplicationAdapter from './application';

export default class UserAdapter extends ApplicationAdapter {
  urlForQueryRecord(query) {
    if (query.me) {
      delete query.me;

      return `${super.buildURL(...arguments)}/me`;
    }

    return `${super.buildURL(...arguments)}`;
  }
}

这里有什么问题?

【问题讨论】:

  • 你的适配器是什么样子的?我假设str 不是字符串。
  • 是的,str 未定义。我在我的问题中添加了UserAdapter。

标签: javascript ember.js ember-simple-auth ember-octane


【解决方案1】:

当您执行super.buildURL(...arguments) 时,实际上您执行的是super.buildURL(query)。 query 是一个对象 ({ me: true }) 而不是字符串,而 buildURL 期望 modelName 作为第一个参数。

所以可能你想做这样的事情:

urlForQueryRecord(query, modelName) {
  if (query.me) {
    delete query.me;

    return `${super.buildURL(modelName)}/me`;
  }

  return `${super.buildURL(modelName)}`;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-21
    • 2021-06-25
    • 2018-06-16
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    相关资源
    最近更新 更多