【问题标题】:How can I empty a named outlet in Ember?如何清空 Ember 中的命名插座?
【发布时间】:2013-06-16 21:45:34
【问题描述】:

我的应用程序模板中有一个命名的插座,我仅用于模态(弹出)视图。默认情况下,我希望这是一个空的、未使用的插座,因为我的路线中只有大约 5% 会涉及模态显示。对于那些特定的模态路线,我从深层嵌套的子路线中插入模态模板,例如

App.NeeplyNestedModalChildRoute = Ember.Route.extend({
  renderTemplate: function() {        
    this.render({
      into: 'application',
      outlet: 'modal'
    });
  }
});

我遇到的问题是,我希望“关闭模态框”涉及过渡到不同的、非模态的、嵌套较浅的路线。我已成功过渡到正确的路线,但我不知道如何清除模态出口。如何强制模式出口清除所有非模式路线?


【问题讨论】:

  • 遇到了一种解决方案,即创建一个“空”模板并将其渲染到所有非模态路线上的模态出口中。这似乎有效,但感觉就像一个真正的黑客。还将涉及“清空”所有非模式路线的模式出口。 (而且有很多。)
  • 我想这是一个可行的解决方案,但是有没有一种干净的方法可以让插入“空”模板成为所有非模式路线的默认行为?
  • 看起来“清算”网点有一个未解决的问题:github.com/emberjs/ember.js/issues/2002
  • 我明白了,我想既然这个问题被标记为改进,你最好坚持你的实际解决方案......对不起,我无能为力:/

标签: ember.js modal-dialog ember-router outlet


【解决方案1】:

我在issue @intuitive pixel was talking about 上评论了这个用例。至少部分功能似乎已经为您尝试做的事情提供了功能。离开路线时,您可以使用deactivate 挂钩。我认为,您可以清除出口。

也许您可以创建一个空模板,然后将其渲染到插座中。然后在调用 deactivate 钩子时,只需将空模板渲染到插座中。现在应该可以,直到他们关闭 the issue

【讨论】:

    【解决方案2】:

    我正在使用以下代码的变体来清除我的模态outlet

    clearOutlet: function (container, outlet) {
        var parentView = this.router._lookupActiveView(container);
        parentView.disconnectOutlet(outlet);
      }
    

    在 Ember 讨论板上查看来自 @teddyzeeny 的完整代码:http://discuss.emberjs.com/t/modal-views-can-we-agree-on-a-best-practice/707/2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 2017-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多