2016-10-31 5 views
0

Was ich versuche zu tun scheint einfach, aber ich kann nicht ganz herausfinden, wie es geht.Erkennen, wenn eine hasMany -Eigenschaft mit keinen Ergebnissen gefüllt wurde

Ich benutze Emberjs 2.8.

Ich habe folgendes Modell mit einer async: true Eigenschaft:

models/my-model.js 

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    childModels: DS.hasMany('otherModel', {async: true}) 
}); 

Ich habe eine Komponente, die eines dieser Modelle zeigt:

/components/my-component.js 

import Ember from 'ember'; 
export default Ember.Component.extend({ 
    theModel: // model of type my-model here 
}) 

Es ist möglich, dass my-model.childModels keine Datensätze haben. Was ich tun möchte, ist in der Vorlage eine Meldung "no children found" angezeigt, wenn dies der Fall ist, aber ich möchte nur nach der asynchrone Aufruf an den Server gemacht wird und eine leere Antwort zurückgegeben. So möchte ich die Vorlage so etwas wie folgt aussehen:

templates/components/my-component.hbs 

<div> 
{{#if theModel.childModels.length == 0}} 
    // display message saying there are no children 
{{else}} 
    {{#each theModel.childModels as |child}} 
     // do something 
    {{/each}} 
{{/if}} 
</div> 

Der schwierige Teil ist zu wissen, wenn die Beziehung bereits vom Server bevölkert hat. Ich kann nicht einfach nach .length == 0 suchen, denn das ist wahr, bevor der asynchrone Aufruf erfolgt und ich möchte nicht, dass das DOM unnötigerweise hin und her wechselt. Was ich brauche, ist etwas wie theModel.childModels.isLoaded, aber nach dem Durchsehen der Dokumente bin ich nicht sicher, wie man das erreicht.

Kann jemand einen Weg vorschlagen, dies zu tun? Jeder Rat würde geschätzt werden. Vielen Dank!

+0

Können Sie angeben, welche Anfrage beim Zugriff auf 'theModel.get ('childModels') gemacht wird? Denn soweit ich weiß, haben Sie entweder ids mit "parentModel" versehen, so dass Sie bereits wissen, wie viele Kinder es gibt oder nicht. – Keo

+0

@Keo die Anfrage ist zu seinem eigenen Endpunkt und würde wie '/ api/the_model/{pk}/children' aussehen - nicht alle Antworten erfordern IDs, es kann nur ein Link sein, wo die Ressourcen zu finden sind – TheMethod

+0

Oh, richtig. Danke, dass du darauf hingewiesen hast. – Keo

Antwort

0

In Ordnung, so fühle ich mich jetzt albern, weil ich die Antwort gefunden habe und es in der Dokumentation war. Die PromiseManyArray verwendet die PromiseProxyMixin, die eine isPending Eigenschaft hat. So kann ich erstellen Sie einfach eine berechnete Eigenschaft wie folgt:

childModelsEmpty: Ember.computed('theModel.childModels', function() { 
    return !this.get('theModel.childModels.isPending') && this.get('theModel.childModels.length') === 0; 
    }), 

, die mir sagen, ob der Server getroffen wurde und eine leere Antwort zurückgegeben wurde.

Verwandte Themen