Ember - 嵌套子路由在路由刷新/重新加载时丢失模型

Posted

技术标签:

【中文标题】Ember - 嵌套子路由在路由刷新/重新加载时丢失模型【英文标题】:Ember - Nested child route loses model upon route refresh/reload 【发布时间】:2017-04-15 04:19:34 【问题描述】:

我有一个嵌套路由,刷新时会丢失模型并显示空白页。代码如下:

路由器

app.Router.map(function()
    this.resource('main',path:'', function()
        this.route('summary',path:'/main/summary',function()
            this.route('details',path:'/details')
        )
    )
)

文件结构

-app
 -route
  -main-route.js
  -main-summary-route.js
  -main-summary-index-route.js
  -main-summary-details-route.js
  -main-loading-route.js

 -controller
  -main-controller.js
  -main-summary-controller.js
  -main-summary-index-controller.js
  -main-summary-details-controller.js

 -templates
  -main
   -summary
    -index.hbs
    -details.bhs
   -summary.hbs
   -loading.hbs
  -main.hbs
  -application.hbs

代码简介: 模板 main.hbsapplication.hbs 中定义了 outlet。 summary.hbs 里面也有 outlet,所以当 url /main/summary 被点击时,它只显示来自 summary/index.hbs 的内容,而当 url /main/summary/细节被击中,它只通过渲染成摘要来显示细节。

我的 ajax 调用进入“main-summary-route”的模型钩子,在等待时,我显示加载模板。 “main-summary-details-controller.js”从“main-summary-index-controller.js”扩展而来,以便可以重用代码。 同样,“main-summary-details-route.js”通过细节路由中的模型钩子获得与“main-summary-route.js”中的模型相同的模型作为-

model: function()
    return this.modelFor('mainSummary')

这是因为 ajax 调用将汇总和路由的数据汇集在一起​​。

问题陈述:当我点击 url main/summary 时,我得到了页面,然后从那里点击,转到 main/summary/details ,我看到页面也更新了详细信息,但是当我在浏览器中手动刷新这个(/main/summary/details)时,页面是空白的,我观察到这次细节路由中的模型钩子中没有返回模型。

我对解决方案的看法: 我认为这会很理想,因为在刷新时,它会首先要求汇总路由(处于父子关系中),调用 ajax(同时加载),当数据通过时,它会显示详细信息。但我想那不会发生。

我不明白,至于出了什么问题。我的想法是,我是否需要在 details 路由中捕获刷新事件并再次调用 ajax,以便它获取数据。

使用的 Ember 版本 - 1.13.0

【问题讨论】:

【参考方案1】:

我确实通过最终在刷新详细信息页面时再次调用 ajax 来解决这个问题。不过,我确实进行了检查,如果“this.modelFor('mainSummary')”可用,则仅返回此模型,否则从 ajax 获取模型。这对我有用。

但我仍然想知道,理想情况下它应该是自己的,即当我刷新时,/main/summary 上的 ajax 应该被自己调用,从而在模型可用时渲染细节。

【讨论】:

以上是关于Ember - 嵌套子路由在路由刷新/重新加载时丢失模型的主要内容,如果未能解决你的问题,请参考以下文章

在 Gorilla Mux 中嵌套子路由器

页眉组件 - 无法让 Vuex 更新嵌套子组件上的存储

React开发中使用react-router-dom路由最新版本V5.1.2路由嵌套子路由

React开发中使用react-router-dom路由最新版本V5.1.2路由嵌套子路由

Ember 中的路由刷新事件

iOS利用scrollView嵌套子视图