0

rails-4アプリで Emberjs-1.0.0 と Ember-data 1.0.0-beta-2 の最新のカナリア ビルドを使用しています。Railsアプリからemberjsアプリの正確なコードでこのjsfiddleを使用すると、エラーはスローされませんが、Railsアプリを起動してember-appのインデックスページに移動しようとすると、Uncaught TypeErrorエラーがスローされます: オブジェクト [object Object] にはメソッド「applyPartial」がありません

他に何も言及されていないため、正確な問題をデバッグまたは特定するのが難しくなっています。ターボリンクを取り外したので、ここでは問題ありません。

スローされたキャッチされない例外に基づいて、emberjs のこの行に要約され ます

Class.PrototypeMixin.applyPartial(Class.prototype);

このスクリーンショットは、rails-4 アプリ内から読み込まれない emberjs-app に基づいています。

ここに画像の説明を入力

コールスタックのスクリーンショット。ここでは、ストアとしてスーパークラスを示しています。それ以外の場合は、unknownMixin を示しています。 ここに画像の説明を入力

@Jeremy here は、レンダリング後に私のページに表示されるタグの完全なリストです。ビューページソースからこれを取得しましたrake tmp:clear rake assets:cleanを実行しましたが、問題はまだあります

   <script src="/assets/jquery.js?body=1"></script>
   <script src="/assets/jquery_ujs.js?body=1"></script>
   <script src="/assets/handlebars.js?body=1"></script>
   <script src="/assets/ember.js?body=1"></script>
   <script src="/assets/ember-data.js?body=1"></script>
   <script src="/assets/application.js?body=1"></script>
   <script src="/assets/store.js?body=1"></script>
   <script src="/assets/models/users.js?body=1"></script>
   <script src="/assets/controllers/application_controller.js?body=1"></script>
   <script src="/assets/controllers/login_controller.js?body=1"></script>
   <script src="/assets/controllers/signup_controller.js?body=1"></script>
   <script src="/assets/controllers/user_controller.js?body=1"></script>
   <script src="/assets/controllers/user_edit_controller.js?body=1"></script>
   <script src="/assets/controllers/users_controller.js?body=1"></script>
   <script src="/assets/templates/application.js?body=1"></script>
   <script src="/assets/templates/index.js?body=1"></script>
   <script src="/assets/templates/login.js?body=1"></script>
   <script src="/assets/templates/signup.js?body=1"></script>
   <script src="/assets/templates/user.js?body=1"></script>
   <script src="/assets/templates/user/edit.js?body=1"></script>
   <script src="/assets/templates/user/index.js?body=1"></script>
   <script src="/assets/templates/users.js?body=1"></script>
   <script src="/assets/templates/users/index.js?body=1"></script>
   <script src="/assets/router.js?body=1"></script>
   <script src="/assets/routes/application_route.js?body=1"></script>
   <script src="/assets/routes/authenticated_route.js?body=1"></script>
   <script src="/assets/routes/login_route.js?body=1"></script>
   <script src="/assets/routes/signup_route.js?body=1"></script>
   <script src="/assets/routes/user/edit_route.js?body=1"></script>
   <script src="/assets/routes/user/index_route.js?body=1"></script>
   <script src="/assets/routes/user_route.js?body=1"></script>
   <script src="/assets/routes/users/index_route.js?body=1"></script>
   <script src="/assets/routes/users_route.js?body=1"></script>
   <script src="/assets/app.js?body=1"></script>
   <script src="/assets/lib/development/ember-data.js?body=1"></script>
  <script src="/assets/lib/development/ember.js?body=1"></script>
  <script src="/assets/lib/production/ember-data.js?body=1"></script>
  <script src="/assets/lib/production/ember.js?body=1"></script>
  <script src="/assets/note_books.js?body=1"></script>
  <script src="/assets/notes.js?body=1"></script>
4

1 に答える 1

2

あなたが持っているのでember-railsGemfileあなたはおそらくそれが提供するバージョンのEmberを手に入れているでしょうapp/assets/javascripts/lib/development/assets/ember.jsブラウザに読み込んで確認できます。カスタムバージョンを確実に入手したい場合は、これを使用する必要がありますapplication.js

//= require lib/development/ember

application.js別の方法として、ember を完全に削除して、最新の canary ember をレイアウトに直接含めることもできます。

<script type='text/javascript' src="http://builds.emberjs.com/canary/ember.js"></script>

[UPDATE] : OK、問題は、ember.js を複数回 (おそらく複数のバージョンで) 含めていることです。最初にスクリプト タグのビット リストを投稿したときは見逃していましたが、よく見ると、Ember と Ember Data が一番上 (スクリプトの 4 行目と 5 行目) に含まれていることがわかります。それぞれの下部にさらに 2 回含まれています。

...
<script src="/assets/ember.js?body=1"></script>
<script src="/assets/ember-data.js?body=1"></script>
...
<script src="/assets/lib/development/ember-data.js?body=1"></script>
<script src="/assets/lib/development/ember.js?body=1"></script>
<script src="/assets/lib/production/ember-data.js?body=1"></script>
<script src="/assets/lib/production/ember.js?body=1"></script>
...

私の推測では、application.js故意に一度エンバーを必要としています

//= require ember

そして、それは再び拾われていますrequire_tree

//= require_tree .

通常、外部ライブラリ (個人的に保守しないコード) をvendorアプリのディレクトリに保存します。これrequire_treeにより、独自の JavaScript をすべて 1 つのショットに含めることができます。私の構造を使用する私のプロジェクトではember-rails、次のようになります。

app
  assets
    javascripts
      # All my own stuff goes here
vendor
  assets
    ember
      development
        ember.js
        ember-data.js
      production
        ember.js
        ember-data.js

ember-railsinvendorを使用するだけの場合、 でバージョンが検索されます。各ファイルに確実に設定する必要があります。たとえば、これを追加する必要があります:require emberapplication.jsconfig.ember.variantconfig/environments/*.rbconfig/environments/development.rb

config.ember.variant = :development
于 2013-10-12T02:05:18.573 に答える