gpt4 book ai didi

ember.js - 使用 Ember 路由器 v2 进入和退出模态状态的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-02 19:31:03 24 4
gpt4 key购买 nike

我无法找出使用新的 Ember 路由器处理模式状态/ View 的正确方法。更一般地说,如何处理可以进入和退出而不影响“主”状态(URL)的状态?

例如,无论当前叶状态如何,“新消息”按钮始终可用。单击“新消息”应在当前 View 上打开新消息模式,而不影响 URL。

目前,我正在使用这样的方法:

路线:

App.Router.map(function() {
this.route('inbox');
this.route('archive');
});

App.IndexRoute = Em.Route.extend({
...
events: {
newMessage: function() {
this.render('new_message', { into: 'application', outlet: 'modalView' });
},

// Clicking 'Save' or 'Cancel' in the new message modal triggers this event to remove the view:
hideModal: function() {
// BAD - using private API
this.router._lookupActiveView('application').disconnectOutlet('modalView');
}
}
});

App.InboxRoute = Em.Route.extend({
...
renderTemplate: function(controller, model) {
// BAD - need to specify the application template, instead of using default implementation
this.render('inbox', { into: 'application' });
}
});

App.ArchiveRoute = ... // basically the same as InboxRoute

application.handlebars:

<button {{action newMessage}}>New Message</button>
{{outlet}}
{{outlet modalView}}

为了简洁起见,我显然省略了一些代码。

这种方法“有效”,但存在上述两个问题:

  1. 我正在使用私有(private) API 来删除 hideModal 事件处理程序中的模态视图。
  2. 我需要在所有子路由中指定 application 模板,因为如果不这样做,renderTemplate 的默认实现将尝试渲染到模式的模板中如果您打开模式,关闭它,然后在收件箱和存档状态之间导航,而不是进入应用程序(因为模式的模板已成为 IndexRoute 的 lastRenderedTemplate)。

显然,这些问题都不是问题,但很高兴知道我是否缺少更好的方法,或者这是否只是当前路由器 API 中的一个空白。

最佳答案

我们做了同样的事情,但没有访问私有(private) API。我不知道我们的解决方案是否是最佳实践,但它确实有效。

在我们的 RootRoute 事件中,我有一个事件(与您的 newMessage 相同),我们在其中创建需要渲染的 View ,然后附加它。

events: {
showNewSomething: function(){
var newSomethingView = app.NewSomethingView.create({
controller: this.controllerFor('newSomething')
});
newSomethingView.append();
}
}

这会将模态视图附加到我们的应用程序中。在 newSomethingView 中取消或保存时,我们调用 this.remove() 来销毁 View 并再次将其从应用程序中删除。

同样,这感觉不是最佳实践,但它确实有效。如果有人有更好的解决方案,请随时对此发表评论。

关于ember.js - 使用 Ember 路由器 v2 进入和退出模态状态的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14327949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com