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とインスタンスに名前を付けます( emberistlowerCaseによる優れたブログ投稿を参照してください)。これは問題です。これは、ember-dataにインジェクションが登録されており、クラスが定義されている場合は、クラスを自動的にインスタンス化するためです。ここを参照してください。簡単に言うと、どちらかに変更するか、この問題が解決された場合。StoreApp.store = Ember.Store.create({...})App.Store = Ember.Store.extend({...})

これが解決された後、別の問題が発生しEmber.Stateます。代わりにEmber.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 に答える