2014-04-29 16 views
6

Ich versuche, für weitere Daten abfragen, die dokumentiert model.reload() -FunktionModell Nachladen mit Ember Daten

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

aber ich bin eine Fehlermeldung bekommen sagen ...

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

Gibt es einen besseren Weg dies zu tun, es scheint, als ob ich auf diese Weise nicht von der Route auf das Modell zugreifen kann? Hier

ist der Router

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

Hier wird die Route

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!'); 
    } 
    } 
}); 

Hier wird das Modell

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

Und die Vorlagen

<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> 

Ich habe eine jsbin der Ausgabe hier gemacht:

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

Ich kann nicht wirklich verstehen, warum die Reload mir diesen Fehler gibt. Jeder Rat würde sehr geschätzt werden.

Dank

Antwort

10

Da model bereits als Hook auf Ember.Route existiert, können Sie das nicht als eine Eigenschaft erhalten.

Stattdessen können Sie wie folgt vorgehen:

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

Technisch Sie this.get('currentModel').reload(); auch tun könnte, aber das ist nicht dokumentiert und wahrscheinlich auch in Zukunft nicht zur Verfügung stehen wird.

+0

das funktioniert perfekt, danke! – Chris

+4

Ist die Funktion 'reload()' nicht mehr vorhanden? Ich bekomme den Fehler 'this.modelFor (...).reload ist keine Funktion. – Sisir

+0

'modelFor' ist eine Methode der Route Klasse, aber in diesem Fall nicht mit dem, was OP nach – anthonygore

0

Die route model function bietet einen Haken Ihre Controller-Daten zu laden. Es gibt einen spezifischen Abschnitt bei ember guide.

1) Wenn Sie Ihre Inhalte zugreifen möchten, würde es sein:

reload: function() { 

    this.controller.get('content'); 

} 

2) Reload ist eine Methode zur Verfügung, von Ember-Datenobjekte. In Ihrem Beispiel laden Sie ein js-Objekt ({id: 2, title: "Test video title 2", Status: "downloading"}).

+0

Hallo ppcano - danke für die Antwort. Vielleicht ist der JSBin, den ich gemacht habe, zu einfach und verwirrend. Das JS-Objekt, das ich für die Server-Antwort verspottete, ist nicht wirklich, was passiert, es lädt die neuesten Daten von einem API-Endpunkt mit Hilfe von Ember-Daten neu. Ich versuche nur, es wirklich API-Aufruf zu machen. – Chris

13

Die refresh Methode der Route tun würde, was Sie nach

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

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

API docs

+2

vereinbart hat,' this.refresh() 'auf der Route wird das gesamte Modell neu laden – mihai

Verwandte Themen