【问题标题】:Ember: Error while loading route: TypeError: Object function… has no method 'create'Ember:加载路由时出错:TypeError:对象函数...没有方法“创建”
【发布时间】:2014-02-09 20:01:07
【问题描述】:

我接手了一个稍有损坏的 ember 项目,但我什至无法让最基本的模型工作。我已经注释掉了前一个项目的所有代码,基本上只有这个:

App = Ember.Application.create();

App.ApplicationAdapter = DS.FixtureAdapter.extend

App.Admin = DS.Model.extend(
  userName: DS.attr("string")
  roles: DS.attr("string")
)

App.Admin.FIXTURES = [
  {
    userName: 'Tester One'
    roles: 'six-sided die'
  }
  {
    userName: 'Tester Two'
    roles: 'four-sided die'
  }
]

App.Router.map ->
  @route 'about', { path: '/about' }
  @resource 'admins', { path: '/admins' }

App.AdminsRoute = Ember.Route.extend
  model: ->
    return @store.find('admin')

它内置在 Rails 4.0.1 应用程序中(运行 ember-rails 的 0.14.1 和 ember-source 的 1.3.2)。当我转到根页面时,我看到了正确的 ember 模板。当我单击about 的链接时,我会被路由到about 模板。但是当我点击admins 或转到/admins 时,而不是让它呈现admins 模板(这只是一些静态文本),我在我的js 控制台中收到了这个错误:

Error while loading route: TypeError: Object function () {
    var Class = makeCtor(), proto;
    Class.ClassMixin = Mixin.create(this.ClassMixin);
    Class.PrototypeMixin = Mixin.create(this.PrototypeMixin);

    Class.ClassMixin.ownerConstructor = Class;
    Class.PrototypeMixin.o...<omitted>... } has no method 'create'

随后是 ember 代码中的一堆回溯。我不会在任何地方打电话给create,它给应用程序中的其他模型带来了类似的错误,我(此后)已经注释掉了。我已经尝试按照 ember 指南构建它,因为它肯定会起作用。

Ember 检查器使用AdminsControlleradmins 模板在/admins 看到一个名为AdminsRouteadmins 路由。

简单地说,我不知道如何进一步调试。

我已经尝试了多个版本的 ember/-data,但目前我正在使用 1.4.0-beta.6 和 1.0.0-beta.6 并且仍然出现此错误。

谢谢!

【问题讨论】:

  • 重启 Chrome 后报错:Error while loading route: TypeError: undefined is not a function。在 Firefox 上尝试,错误仍然不同:Error while loading route: instantiate@http://localhost:3000/ 等。

标签: javascript ruby-on-rails ember.js ruby-on-rails-4


【解决方案1】:

这是在ember中使用coffeescript时的常见错误,你必须更新

App.ApplicationAdapter = DS.FixtureAdapter.extend

App.ApplicationAdapter = DS.FixtureAdapter.extend()

【讨论】:

  • 这似乎成功了。谢谢。但我会继续使用DS.Store.extend… adapter 语法。
【解决方案2】:

可能是缺少逗号吗?

App.Admin.FIXTURES = [
  {
    userName: 'Tester One'
    roles: 'six-sided die'
  }
  {
    userName: 'Tester Two'
    roles: 'four-sided die'
  }
]

App.Admin.FIXTURES = [
  {
    userName: 'Tester One'
    roles: 'six-sided die'
  },
  {
    userName: 'Tester Two'
    roles: 'four-sided die'
  }
]

【讨论】:

  • 谢谢,但我也试过了。在 CoffeeScript 中,这些逗号是可选的。
【解决方案3】:

尝试为您的灯具中的模型指定一个唯一的 ID

【讨论】:

  • 一旦服务器看到模型,这是必要的。当我发布查询时,我什至还没有走那么远!谢谢!
【解决方案4】:

我怀疑升级过程可能有问题,这是商店的不完善实施。

store.coffee 已简单阅读:

App.ApplicationAdapter = DS.FixtureAdapter.extend

我把它改成了:

App.Store = DS.Store.extend
  adapter:DS.FixtureAdapter

而且它工作得很好(尽管我确实必须添加 ID,正如@chopper 所指出的那样)。鉴于我们将为商店使用 api,我将坚持使用此变体,尽管 @marcio-junior 的建议也有效!谢谢!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-29
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多