【问题标题】:Refresh ember model刷新 ember 模型
【发布时间】:2019-08-04 18:42:06
【问题描述】:

我有一个简单的路由调用

model: function(params) {
  return this.store.find("booking", params.booking_id);
},

访问路线时,可以进行更改,并且我希望在同一会话期间下次访问该页面时重置它们,除非它们已保存。刷新曾经用{ reload: true } 获取的数据的简单操作,现在似乎没有简单直接的替代方案了。

我该怎么做?谢谢。

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    您的路线有一个动态路段。当您生成指向该路由的链接时,您可以选择将模型上下文或 id 传递给该路由。

    如果您传递模型上下文,model() 钩子将不会触发,并且 ember 将使用它当前在商店中保存的任何值。如果您传递 model.id,model() 钩子将触发并获取最新数据。

    检查您到此路由的链接生成,看看您是否将bookingbooking.id 传递给该路由。

    https://guides.emberjs.com/release/routing/specifying-a-routes-model/

    【讨论】:

      【解决方案2】:

      要刷新您的 ember 模型,您可以使用 this.refresh();

      要在离开路线时回滚所有属性,可以使用this.controller.get('model').rollbackAttributes();

      假设有一条名为post的路由

      在你的routes/post.js

      ...
      export default Route.extend({
        ...
        model: function() {
          ....
        },
        actions: {
          refreshModel: function() {
            this.refresh();
          },
          willTransition() {
            this.controller.get('model').rollbackAttributes();
          }
        }
      

      从您的controller 调用refreshModel 操作为this.sendAction('refreshModel')

      【讨论】:

      • 动作应该在控制器上而不是在路由上对应于最后一个RFC discussion about route-action helper。我建议将refreshModel() 操作移至控制器。在这种情况下,您也不需要 sendAction() API,这有点令人困惑。 willTransition 是另一个,因为这是 route hook 而不是“正常”操作。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      • 1970-01-01
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      相关资源
      最近更新 更多