2016-03-22 7 views
0

Ich habe eine Ember JS-Umfrage-Anwendung mit einem Firebase-Backend (Emberfire-Adapter) gebaut.Speichern von User Object Breaks nach Ember Build

Der folgende Code funktioniert einwandfrei, wenn in der Entwicklung:

if(!(_this.currentModel.get('respondents').contains(thisUser))) 
{ 
    thisUser.get('surveysToTake').pushObject(_this.currentModel); 
    _this.currentModel.get('respondents').pushObject(thisUser); 
    var userResponseSet = _this.store.createRecord('response-set', { 
     survey: _this.currentModel, 
     respondentid: thisUser 
    }); 
    var respSetSurveyLookupObj = {'surveyId': _this.currentModel.get('id'), 
            'respSetId': userResponseSet.get('id')}; 
    if(thisUser.get('respSetSurveyLookup')) 
    { 
     thisUser.get('respSetSurveyLookup').pushObject(respSetSurveyLookupObj); 
    } else { 
     thisUser.set('respSetSurveyLookup', [respSetSurveyLookupObj]); 
    } 
    thisUser.save().then(function(){ 
     Ember.RSVP.all([_this.currentModel.save(), userResponseSet.save()]).then(function(){ 
     controller.setProperties({ multipleUsers: '', showAddUsers: false}); 
     }); 
    }).catch(function(msg){console.log(msg);}); 
} 

Aber der Moment, als ich tue:

ember build -prod 

Es wirft einen Fehler beim Versuch, das Benutzerobjekt zu speichern. Die spezifische Stelle, die den Fehler auslöst, ist, wenn ich versuche, dem respSetSurveyLookup-Array hinzuzufügen.

Leider bin ich nicht in der Lage, den Stack-Trace herunter zu arbeiten, da die Fehlermeldung in minimiertem JS-Code ist.

Meine Frage ist also, was könnte dazu führen, dass ein Benutzerobjekt speichern nur fehlgeschlagen, wenn ein Ember-Build fertig ist? Ist das ein Problem, das von Ember CLI (was baut)? Oder hat es etwas mit dem Firebase Emberfire Adapter zu tun?

Zusätzliche Informationen: Ich benutze Ember CLI 1.13.13, Ember 1.13.11 und Ember Daten 1.13.11.

+0

@Piyush Khatri ... Vielen Dank, dass Sie den Code viel besser lesbar durch Einrücken. SO Felsen! – learningMachine

+0

Wenn Sie die Array-Elemente speichern, können Sie sich so verhalten => Ember.RSVP.all ([this.currentModel, userResponseSet] .invozieren ('save')) –

+0

@kristjanreinhold thanks. das ist ordentlich. – learningMachine

Antwort

0

okay ... Ich denke, ich habe eine temporäre Lösung und eine mögliche Argumentation für das Problem. Nachdem Sie tun, um eine Ember zu bauen und dann wie folgt vorgehen:

thisUser.get('respSetSurveyLookup').pushObject(respSetSurveyLookupObj); 

respSetSurveyLookup, die eine regelmäßige Anordnung ist in ein Ember Array umgewandelt wird. Und wenn Sie versuchen, dies zu speichern, gibt Firebase einen Fehler aus (es kann nicht mit einem eingebetteten Glut-Array umgehen).

Die folgende Änderung scheint das Problem zu beheben:

thisUser.get('respSetSurveyLookup').pushObject(respSetSurveyLookupObj); 
thisUser.set('respSetSurveyLookup', JSON.parse(JSON.stringify(thisUser.get('respSetSurveyLookup')))); 
+0

Wie wäre es mit this.set ('x', x.toArray()); –

+0

danke @kristalljeineinhold ... 'x.toArray()' funktioniert nicht. Aber ... Array.from Methode kann eine mögliche Alternative sein? - https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/from – learningMachine

+0

Wenn es funktioniert dann ja. Ich benutze es hauptsächlich für Funktionsargumente => Array.from (Argumente) –

Verwandte Themen