代码之家  ›  专栏  ›  技术社区  ›  dorindo

查询参数中的更改未刷新路由

  •  3
  • dorindo  · 技术社区  · 8 年前

    我在路由中设置了queryParam设置,以便在查询参数更改时刷新模型。但是,当查询参数更改时 setupController 未调用。知道为什么会这样吗?

    export default Route.extend({
      queryParams: {
        id: {
          refreshModel: true
        }
      },
    
      setupController(controller) {
        controller.start(); // fetches data synchronously from api
      }
    });
    

    //感谢阿尔普图格的回复

    export default Route.extend({
      queryParams: {
        id: {
          refreshModel: true
        }
      },
    
      model() {
        // Returning a new array/object/value everytime the hook is called, causes the 
        // setupController hook to be called.
        return [];
      }
    
      setupController(controller) {
        controller.start(); // fetches data synchronously from api
      }
    });
    
    1 回复  |  直到 8 年前
        1
  •  4
  •   feanor07    8 年前

    refreshModel 强制路由到 refresh 正如你所料 beforeModel , model , afterModel setupController 要运行的挂钩。然而对于 设置控制器 挂钩:

    查看以下内容的评论 刷新 余烬法 route.js source code relevant API documentation . 双方均表示:

    “刷新此路由和所有子路由上的模型,启动 beforeModel之前 , 模型 后置模型 钩子的方式类似于从其他管线过渡时如何输入管线。当前路线参数(例如:。 article_id )将传递到各自的模型挂钩,如果返回不同的模型, 设置控制器 相关的线路挂钩也会重新开火。"

    这意味着;为了 设置控制器 在案例a中触发 刷新 发生;应从返回不同的模型 模型 钩在您的情况下;您没有任何型号 hook ; 因此 设置控制器 不会被调用 id 参数值更改。

    顺便说一句在重写时调用super方法是一种很好的做法 设置控制器 钩子,因为它的唯一目的是 模型 属性到 controller . 看看 API 有关此案例的详细说明。