我已经创建了一个rails应用程序,并计划使用ember来实现它的一部分。基本上我想要一个路由与ember应用程序链接,而其他页面是传统的rails。但是,似乎默认情况下ember会在每个页面的body标签中插入一个ember模板,而我只想在一个特定页面上进行此操作。
例如,我想要路线' / ember'成为一个ember应用程序,其中呈现application.hbs。任何其他路由由rails正常处理,而ember不在页面中插入模板。
我如何确定是这种情况?
答案 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'
},
如果您需要更多帮助,请与我们联系。