未根据路线呈现/删除侧边栏



我已经用Ember做了几个小时的实验,但没有成功。希望这只是我在阅读Ember文档时遇到的一个术语问题。

我有一个应用程序,它在很大程度上由一个侧边栏/顶部栏(称为包装器)和一个页脚组成。

我的基本应用程序.hbs看起来是这样的(我正在使用Ember App Kit来提供结构):

{{partial "wrapper"}}
{{outlet}}
{{partial "footer"}}

如果这是我的应用程序的状态,它会运行得很好。页面内容加载在{{outlet}}罚款中。

我的主要问题是如何以"Ember"的方式打破这个模板结构(最好不要使用所有jQuery和随意删除DOM元素)。

我有一些路由不希望包装器和页脚显示在上面(它们是全页登录/忘记密码路由,以及一些最小界面/无干扰模式)。

我尝试通过制作默认模板(application.hbs)来删除侧边栏和页脚:

{{#if showWrappers}}
{{partial "wrapper"}}
{{/if}}
{{outlet}}
{{#if showWrappers}}
{{partial "footer"}}
{{/if}}

其中showWrappers在ApplicationController中:

export default Ember.Controller.extend({
showWrappers: function() {
var routes = ['login'],
currentPath = this.get('currentPath'),
show = true;
routes.forEach(function(item) {
var path = new RegExp('^' + item + '*');
if (!Ember.isEmpty(currentPath.match(path))) {
show = false;
}
});
return show;
}.property('currentPath'),
});

尝试从/使用{{link to}}转换到/登录返回一个错误:Uncaught Error: Cannot perform operations on a Metamorph that is not in the DOM可能是因为我正在删除Ember想要保留的东西(我在侧边栏中使用{{link to}}和{{bind-attr}},所以那里有绑定)。

意识到我可以使用actions和jQuery来隐藏页面的元素,并将它们带回"无干扰"模式,但我更愿意学习如何构建模板,并使用带有renderTemplate钩子的Routes,可能会使用this.render(?)来破坏当前DOM,并从不同的基础(而不是application.hbs)重建。

想法?非常乐意澄清。

我发现了disconnectOutlet,并将我的部分转换为outlet:

{{outlet wrapper}}
{{outlet}}
{{outlet footer}}

使我的ApplicationRoute默认呈现给他们:

export default Ember.Route.extend({
renderTemplate: function() {
this.render();
this.render('wrapper', {
outlet: 'wrapper',
into: 'application'
});
this.render('footer', {
outlet: 'footer',
into: 'application'
});
}
});

然后在LoginRoute上,我只为包装器和页脚运行this.disconnectOutlet,并且似乎运行得很好。

相关内容

  • 没有找到相关文章

最新更新