2016-07-14 23 views
0

AKTUALISIERUNG: Unten finden Sie einen Originalbeitrag zu Ember Data Relationships, von dem ich glaube, dass er eher mit einem Problem mit dem EmberFire-Adapter zusammenhängt und wie viele Array-Datensätze verarbeitet werden. Es scheint, dass die lokale store in Ember Data ordnungsgemäß aktualisiert wird, diese Datensätze werden jedoch nicht in die entsprechende Firebase-Datenbank verschoben, nachdem der Speicher aktualisiert wurde.EmberFire Datenrelationen werden nicht korrekt aktualisiert

Ich habe die emberfire- und firebase-Tags hinzugefügt, um hoffentlich eine Antwort in dieser Community zu finden. Jede Hilfe wird geschätzt, und ich bin glücklich, zusätzliche Informationen bei Bedarf bereitzustellen.


Ich habe zwei Modelle, die mit hasMany und belongsTo Beziehungen definiert sind. Hier ist der erste „Rahmen“ Modell:

// -- Frameworks Model 
import DS from 'ember-data'; 
const { attr, hasMany } = DS; 

export default DS.RESTSerializer.extend(DS.EmbeddedRecordsMixin, { 
    attrs: { 
    questions: { serialize: 'ids' } 
    } 
}); 

export default DS.Model.extend({ 
    name: attr('string'), 
    reports: hasMany('report'), 
    questions: hasMany('question', {async: true}), 
    includedFramework: attr('string'), 
    reportOnlyOnce: attr('string', { defaultValue: false }), 
    frameBuilder: attr('string', {defaultValue: "none"}), 
    createdAt: attr('string'), 
    createdBy: attr('string'), 
    updatedAt: attr('string'), 
    updatedBy: attr('string') 
}); 

Und die zweite „Frage“ Modell:

// -- Question Model 
import DS from 'ember-data'; 
const { attr, hasMany, belongsTo } = DS; 

export default DS.Model.extend({ 
    framework: belongsTo('frameworks', {async: true}), 
    detail: attr('string'), 
    type: attr('string'), 
    createdAt: attr('string'), 
    createdBy: attr('string'), 
    position: attr('number'), 
    options: hasMany('option') 
}); 

Auf meinem Weg, ziehe ich in dem Modell für den Rahmen (in diesem Fall die Definition des Modells ID zum Testen):

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    model(params) { 
    let id = params.report_id; 
    var self = this; 

    return Ember.RSVP.hash({ 
     report: this.store.find('report', id), 
     general: this.store.find('frameworks', '-KITSAxjdE5TiVdk-aPC') 
    }) 
    } 
}); 

aus irgendeinem Grund hat dieser Rahmen ein Array in Fragen gespeichert, die 4 der 6 verschiedenen „Fragen“ hat, die zu ihm gehören sollte. Ich weiß nicht, warum 4 der im Rahmenmodell auch gespeichert und 2 von ihnen nicht. In meiner Vorlage für die Seite:

{{#each model.general.questions as |question|}} 

     {{#paper-item class="md-1-line"}} 
     <p class="question"> 
      {{question.detail}} 
     </p> 
     <p class="option"> 
      {{#if (eq question.type "text")}} 
      {{paper-input value=question.id onChange=(action (mut question.id))}} 
      {{/if}} 
     </p> 

     {{/paper-item}} 

{{#each model.general.questions as |question|}} funktioniert hervorragend für die 4 Fragen, die für diese ID im Rahmen Modell tatsächlich gespeichert sind, nicht aber die anderen 2. Die anderen 2 Fragen nicht die belongsTo Beziehung der Referenzierung haben korrekter Rahmen.

Ich habe versucht, einen Serializer im Framework-Modell hinzuzufügen (wie Sie oben sehen können), aber es gab keine Änderung.

ich auch versucht habe, manuell hinzufügen, die Frage des Rahmen speichern, wenn eine neue Frage mit erstellt:

framework.get('questions').then(function(question) { 
    return question.pushObject(newQuestion); 
}) 

aber keine Änderung mit, dass entweder.

Alle Gedanken sind willkommen, ich bin gerne bereit, weitere relevante Code-Schnipsel zur Verfügung zu stellen.

Antwort

1

Dieses Problem scheint sich auf die Art und Weise EmberFire reagiert auf Modelle mit belongsTo und hasMany Beziehungen verbunden zu sein, wo die „Eltern“ Modell mit einem hasMany Bezug auf die Kindermodelle nicht automatisch aktualisiert, wenn ein child Modell erstellt wird.

Es wurde ein Problem auf GitHub vorgelegt weiterhin untersuchen, wie dieses Problem zu beheben: https://github.com/firebase/emberfire/issues/412

+0

Ich habe einigen Kontext in der Github Ausgabe – tstirrat