1

尝试使用 Ember 路由时出现此 JS 错误:

Uncaught TypeError: Object <DS.Store:ember215> has no method 'create' ember-data-latest.js:3677
    Ember.onLoad.app.registerInjection.injection ember-data-latest.js:3677
    Ember.Application.Ember.Namespace.extend.initialize ember-latest.js:10381
    Ember.Application.Ember.Namespace.extend.initialize ember-latest.js:10380
    Ember.Application.Ember.Namespace.extend.initialize ember-latest.js:10379
    (anonymous function) app.js:6

这是来自 GitHub 的最新 Ember.js 和 Ember Data(主版本,而不是发布版本)。我知道使用当前版本可能会导致类似的问题,但到目前为止这似乎不寻常。

回顾这些行,Ember 路由代码似乎调用了 Ember Data 函数,这会导致错误(并阻止路由正常工作)。

有什么解决方案吗?

jsFiddle:http: //jsfiddle.net/bkjT4/2/

App = Ember.Application.create({});

App.Store = DS.Store.create({
  revision: 4,
  adapter: DS.RESTAdapter.create()
});

App.Router = Ember.Router.extend({
  root: Ember.State.extend({
    index: Ember.State.extend({
      route: '/'
    })
  })
});

App.router = App.Router.create({
    location: 'history' // does the same with hash
});

App.initialize(App.router);

​</p>

4

1 回答 1

4

好吧,关于 的问题has no method create()是因为您命名了您的商店App.Store(大写字符串“Store”)并且它是一个实例。Ember.js 中的约定是您命名类UpperCase和实例lowerCase(请参阅emberist 的一篇好博文)。这是一个问题,因为在 ember-data 中注册了一个注入,它会自动实例化一个Store类,如果已定义,请参见此处。长话短说:如果你把它改成App.store = Ember.Store.create({...})或者App.Store = Ember.Store.extend({...})这个问题就解决了。

解决了这个问题之后,又出现了另一个问题:你Ember.StateEmber.Router你应该使用的地方使用Ember.Route。所以最终的代码看起来像这样,见http://jsfiddle.net/pangratz666/5Y2PX/

App = Ember.Application.create({});

App.store = DS.Store.create({
  revision: 4,
  adapter: DS.RESTAdapter.create()
});

App.Router = Ember.Router.extend({
  root: Ember.Route.extend({
    index: Ember.Route.extend({
      route: '/'
    })
  })
});

App.router = App.Router.create({
    location: 'history'
});

App.initialize(App.router);

​</p>

于 2012-07-03T16:59:36.233 回答