使用Ember数据重新加载模型

Model reloading with Ember Data

本文关键字:加载 模型 新加载 Ember 数据 使用      更新时间:2023-09-26

我正在尝试使用文档化的model.reload()函数轮询更多数据

App.ModelViewRoute = Ember.Route.extend({
  actions: {
    reload: function() {
      this.get('model').reload();
    }
  }
});

但我收到一条错误消息说。。。

undefined is not a function TypeError: undefined is not a function

有更好的方法吗?我似乎无法从路线上以这种方式访问模型?

这是路由器

App.Router.map(function() {
  this.route('video', { path: '/videos/:video_id' });
});

这是的路线

App.VideoRoute = Ember.Route.extend({
  model: function(params) {
    return this.store.find('video', params.video_id);
  },
  actions: {
    reloadModel: function() {
      // PROBLEM HERE
      // this.get('model').reload();
      Ember.Logger.log('reload called!');
    }
  }
});

这是型号

App.Video = DS.Model.extend({
   title: DS.attr('string'),
   status: DS.attr('string')
});

和模板

<script type="text/x-handlebars" data-template-name="application">
  <h1>Testing model reloading</h1>
  {{#link-to "video" 1}}view problem{{/link-to}}
  {{outlet}}
</script>
<script type="text/x-handlebars" data-template-name="video">
  <h1>Video</h1>
  <h2>{{title}}</h2>
  {{model.status}}
  <p><button {{action 'reloadModel'}}>Reload model</button></p>
</script>

我在这里对这个问题做了一个jsbin:

http://jsbin.com/wofaj/13/edit?html,js,输出

我真的不明白为什么重新加载会给我这个错误。任何建议都将不胜感激。

感谢

由于model已经作为钩子存在于Ember.Route上,因此无法将其作为属性获取。

相反,您可以执行以下操作:

this.modelFor('video').reload();

从技术上讲,你也可以做this.get('currentModel').reload();,但这是未记录的,将来可能无法使用。

路线的refresh方法将执行之后的操作

App.VideoRoute = Ember.Route.extend({
  model: function(params) {
    return this.store.find('video', params.video_id);
  },
  actions: {
    reloadModel: function() {
      this.refresh()
    }
  }
});

API文档

路由模型函数提供了一个钩子来加载控制器数据。余烬指南中有一个特定的部分。

1) 如果你想访问你的内容,它会像:

reload: function() {
  this.controller.get('content');
}

2) reload是成员数据对象可用的方法。在您的示例中,您正在加载一个js对象({id:2,title:"Test video title 2",status:"downloading"})。