【问题标题】:EmberJS - didInsertElement for previously displayed viewEmberJS - didInsertElement 用于先前显示的视图
【发布时间】:2013-06-05 00:30:06
【问题描述】:

我有一个包含多个页面的流程,当我使用“transitionTo”返回到已显示的路线/视图时,它的“didInsertElement”方法未被调用。 (不过,它是在第一次显示视图时触发的)

是否有我的视图可以挂钩的事件每次显示时都会被调用?

我的路线看起来像这样

App.Router.map(function() {
    this.resource("parent", { path: "/parent" }, function() {
        this.resource("child", { path: "/child" });
    });
});

所以当我在子视图中调用时:

this.transitionTo('parent')

父视图不会触发“didInsertElement”。

【问题讨论】:

  • 这些其他视图是同一条路线吗?又名 /post/1/post/2
  • 一个是另一个的嵌套视图。我会更新我的描述。
  • 你想在视图的 didInsertElement 钩子中做什么?

标签: ember.js


【解决方案1】:

我发现我可以在路由中使用setupController 让我知道每次渲染路由时。我知道这不是最好的解决方案,但到目前为止,它是最可靠的。

【讨论】:

    【解决方案2】:

    父级已经渲染,因为子级在父级的插座内渲染。当您转换回父视图时,您想做什么?可能有更好的方法来做你想做的事

    【讨论】:

    • 我正在尝试重置视图的原始视图。这是一个登录屏幕,从显示表单到显示进度指示器。当此人返回此视图时,它需要重新设置以再次显示登录表单。我还想将逻辑保留在登录视图本身中。所以,我想我正在寻找一个在显示视图时触发的事件。
    • 关于这个问题的任何更新?我目前遇到了同样的问题。
    【解决方案3】:

    如果您的路线是嵌套的,您的模板也应该是嵌套的。所以我希望你的模板看起来像这样:

    <script type="text/x-handlebars" data-template-name="parent">
      <!-- Your parent View stuff -->
    
      {{outlet}} <!-- This is where your child gets rendered
    </script>
    

    因此,您的父视图内容已插入并保持插入状态。当您过渡到/离开父母时,它不应该去任何地方。

    在转换回父级后,您需要 didInsertElement 到底要做什么。 didInsertElement 钩子真正用于较低级别的 dom 操作,例如设置 jQuery 插件。如果您尝试做更多应用程序逻辑的东西,它可能属于其他地方。

    【讨论】:

    • 我正在尝试重置视图的原始状态。这是一个登录屏幕,从显示表单到显示进度指示器。当该人回到它时,它需要重新设置以再次显示登录表单。我还想将逻辑保留在登录视图本身中。所以,我想我正在寻找一个在显示视图时触发的事件。
    猜你喜欢
    • 1970-01-01
    • 2015-11-23
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多