Презареждане на модел с 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) презареждане е наличен метод за обекти с данни за жар. Във вашия пример вие зареждате js обект ({ id:2, title:"Test video title 2", status:"downloading"}).

person ppcano    schedule 29.04.2014
comment
Здравей ppcano - благодаря за отговора. Може би JSBin, който направих, е твърде опростен и объркващ. JS обектът, на който се подиграх за отговора на сървъра, всъщност не е това, което се случва, той презарежда най-новите данни от крайна точка на API, използвайки Ember Data. Просто се опитвам да го накарам да направи това API извикване наистина. - person Chris; 30.04.2014