Перезагрузка модели с Ember Data

Я пытаюсь получить дополнительные данные, используя документированную функцию 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,output

Я действительно не могу понять, почему перезагрузка выдает мне эту ошибку. Любые советы будут высоко ценится.

Спасибо


person Chris    schedule 29.04.2014    source источник


Ответы (3)


Поскольку model уже существует как хук в Ember.Route, вы не можете получить его как свойство.

Вместо этого вы можете сделать следующее:

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

Технически вы могли бы сделать и this.get('currentModel').reload();, но это недокументировано и, вероятно, не будет доступно в будущем.

person Christoffer P.    schedule 30.04.2014
comment
Функция reload() больше не существует? Я получаю сообщение об ошибке this.modelFor(...).reload is not a function - person Sisir; 19.01.2015
comment
modelFor — это метод класса Route, но в данном случае он не связан с тем, о чем спрашивает OP. - person anthonygore; 15.09.2015

Метод refresh маршрута сделает то, что вам нужно

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

  actions: {
    reloadModel: function() {
      this.refresh()
    }
  }
});

Документация по API

person anthonygore    schedule 15.09.2015

функция модели маршрута предоставляет перехватчик для загрузки данных вашего контроллера. В руководстве по Ember есть специальный раздел.

1) Если вы хотите получить доступ к своему контенту, это будет выглядеть так:

reload: function() {

  this.controller.get('content');

}

2) reload — это метод, доступный для объектов ember-data. В вашем примере вы загружаете объект js ({id:2, title:"Test video title 2", status:"downloading"}).

person ppcano    schedule 29.04.2014
comment
Привет ppcano - спасибо за ответ. Возможно, JSBin, который я сделал, слишком упрощен и запутан. Объект JS, который я издевался над ответом сервера, на самом деле не то, что происходит, он перезагружает последние данные из конечной точки API, используя данные Ember. Я просто пытаюсь заставить его сделать этот вызов API. - person Chris; 30.04.2014