2

我已经创建了一个 Rails 应用程序,并计划使用 ember 来实现它的一部分。基本上我想要一条与 ember 应用程序链接的路线,而其他页面是传统的 rails。但是,似乎默认情况下 ember 会在每个页面上的 body 标记中插入一个 ember 模板,而我只希望这发生在一个特定页面上。

例如,我希望路由 '/ember' 是一个 ember 应用程序,在该应用程序中呈现 application.hbs。任何其他路由都由 rails a normal 处理,并且 ember 不会在页面中插入模板。

我怎样才能确保是这种情况?

4

2 回答 2

2

我有一个类似的设置,只是我的 ember 应用程序附加到了一个特定的元素,但这不会有太大的变化。诀窍是 deferReadiness,它告诉 ember 在你告诉它之前不要启动。因此,为应该具有 ember 应用程序的页面添加一些独特的内容,并将其从其他页面中排除,如果它不存在 deferReadiness。

window.App = App = Ember.Application.create({
  rootElement: '#ember-container'
});

// AKA don't start the app cause aint nothing to hook up to
if($('#ember-container').length==0){
  App.deferReadiness();
}
于 2014-06-09T23:34:50.593 回答
0

您可以使用 ember-cli-rails 来实现此目的。

您可以配置 Rails 以将 ember 应用程序安装到特定路径。

# config/routes.rb

Rails.application.routes.draw do
  mount_ember_app :frontend, to: "/ember"
end

如果需要,您甚至可以使用与应用程序的其余部分相同的 rails 布局,并让 ember 仅在某个元素中呈现。

<%# app/views/posts/index.html.erb %>                                                                                

<div id="ember-application"></div>                                                                                   
<%= include_ember_script_tags :frontend %>                                                                           
<%= include_ember_stylesheet_tags :frontend %>                                                                       

诀窍是rootElement在 ember 端的 config/environment.js 中进行设置。

/* frontend/config/environment.js */                                                                                 
/* eslint-env node */                                                                                                

module.exports = function(environment) {                                                                             
  var ENV = {                                                                                                        
    modulePrefix: 'frontend',                                                                                        
    environment: environment,                                                                                        
    baseURL: '/',                                                                                                    
    locationType: 'auto',                                                                                            
    //locationType: 'none',                                                                                          
    EmberENV: {                                                                                                      
      FEATURES: {                                                                                                    
        // Here you can enable experimental features on an ember canary build                                        
        // e.g. 'with-controller': true                                                                              
      }                                                                                                              
    },                                                                                                               

    APP: {                                                                                                           
      // Here you can pass flags/options to your application instance                                                
      // when it is created                                                                                          
      rootElement: '#ember-application'                                                                              
    },                                                                                                               

如果您需要更多帮助,请告诉我。

于 2017-08-24T08:53:52.613 回答