2

これが幅広い質問であることはわかっていますが、具体的な答えを見つけることができなかったので、ショットガンアプローチを引っ張る必要があると感じています.

Railsアプリ内にemberアプリをロードしようとしています。私は ember_controller.rb を持っています:

class EmberController < FrontendController
  layout 'ember'
  def load
  end
end

私の Rails ルートは次のようになります。

MdmFrontEnd::Application.routes.draw do

  resources :sessions, only: [:create, :new, :destroy]

  match '/signin', to: 'sessions#new'
  match '/signout', to: 'sessions#destroy', via: :delete
  match '*path' => 'ember#load'
  root to: 'ember#load' #makes the root of the app, the ember root.
end

私のレールのレイアウトは次のようになります。

!!! 5
%html
  %head
    %meta{charset:"utf-8"}
    %title= t("layouts.mobile_manager")
    %meta{name:"viewport", content:"width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" }
    %link{rel: "icon", type:"image/png", href:"/assets/favicon_16x16.png"}
    = javascript_include_tag "i18n"
    :javascript
      window.locale = "<%= I18n.locale %>";
    = stylesheet_link_tag 'application', media: 'all' 
    = csrf_meta_tags 
    <!--[if lt IE 9]>
    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
    <![endif]-->

    -if Rails.env.production? 
      :javascript
        var _gaq = _gaq || [];
        _gaq.push(['_setAccount', 'UA-33246783-1']);
        _gaq.push(['_trackPageview']);
        (function() {
          var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
          ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
          var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
        })();
    = render 'shared/js_constants'
    = javascript_include_tag 'app_ember'
  %body

app_ember.coffee で新しい ember アプリを次のように初期化しています。

#= require jquery
#= require jquery_ujs
#= require handlebars
#= require ember
#= require_self
#= require_tree ./app/routes
#= require_tree ./app/controllers
#= require_tree ./app/models
#= require_tree ./app/templates
#= require_tree ./app/views

window.Mdm = Ember.Application.createWithMixins
  LOG_TRANSITIONS: true

  ajax: ->
  $.ajax.apply(this, arguments)

  getUrl: (path) ->
    "/#{path}"

次に、アプリケーション内に {{outlet}} を持つテンプレート application.hbs と index.hbs を用意します。

しかし、ルートをレンダリングしようとすると、空白の画面が表示されます。

ただし、コンソールで Ember.TEMPLATES を実行すると、各テンプレート オブジェクトが一覧表示されるため、テンプレートが表示されていることはわかっています。

b/t rails と ember の問題のように感じますが、わかりません。

アイデアをありがとう!

編集:: 私のコンソール

ここに画像の説明を入力

ご覧のとおり、テンプレート オブジェクトを読み込んでいますが、アプリケーションまたはインデックス テンプレートが見つからないというメッセージも表示されます。私のテンプレートディレクトリは、モデル、コントローラなどの他のディレクトリと同じように名前が付けられ、配置されています。

4

1 に答える 1

1

ここでは多くのことが起こっていますが、確かに言うのは難しいです. 考慮すべき事項

  1. ember アプリが正常に起動した場合は、console.log の出力が表示されるはずです。これには、ember re からのデバッグ情報が含まれます。どのバージョンがロードされたか。表示されない場合は、環境に問題があります。

  2. を設定LOG_TRANSITION: trueしたので、次のような console.log メッセージが表示されるはずですTransitioned into 'post.index'。ルーターが現在のルートに移行するとき。ページの読み込み時にこれらのメッセージがコンソールに表示されない場合、アプリは正しく起動していません。

  3. 多くの場合、この種の問題が発生するのは、命名規則が ember が期待するものと一致しないためです。その結果、私のコードは無視され、ember は生成されたデフォルトで動作します。内部で何が起こっているかを確認するには、アプリケーションの作成時にさらに 2 つのプロパティを設定します。

-

LOG_ACTIVE_GENERATION: true,
LOG_VIEW_LOOKUPS: true

これにより、ember がルート/コントローラーを生成するか、ビューをレンダリングするたびに、console.log の出力が表示されるはずです。これらすべてが整うと、console.log は次のようになります。

DEBUG: -------------------------------
DEBUG: Ember.VERSION : 1.0.0-rc.4 
DEBUG: Handlebars.VERSION : 1.0.0-rc.4
DEBUG: jQuery.VERSION : 1.8.3
DEBUG: ------------------------------- 
generated -> route:post.index Object {fullName: "route:post.index"}
Rendering application with <App.ApplicationView:ember785> Object {fullName: "view:application"} 
Rendering post with <App.PostView:ember789> Object {fullName: "view:post"} 
generated -> controller:post.index Object {fullName: "controller:post.index"} 
Rendering post.index with default view <Ember._MetamorphView:ember796> Object {fullName: "view:post.index"}
Transitioned into 'post.index' 

ここでは、生成されているクラス、レンダリングされているテンプレート、使用されているビュー クラスを確認できます。

于 2013-06-12T23:23:54.053 に答える