Rails Ember混合应用程序

时间:2014-06-09 22:01:48

标签: ruby-on-rails ruby web-applications ember.js ember-rails

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

例如,我想要路线' / ember'成为一个ember应用程序,其中呈现application.hbs。任何其他路由由rails正常处理,而ember不在页面中插入模板。

我如何确定是这种情况?

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分: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 %>                                                                       

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

/* 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'                                                                              
    },                                                                                                               

如果您需要更多帮助,请与我们联系。