2016-10-08 1 views
0

Angenommen, ich habe ein Modell für ein Spiel, und jedem Spiel sind Spielkarten zugeordnet. Ich würde ein Modell wie diese:Ember 2.8: 'Sortiere ein Array von Objekten, um es in der Attributliste eines Modells zu speichern

Game.js

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    gamecards: DS.attr('string'); 
}); 

und in diesem gamecards Attribute würde Ich mag irgendwie ein Array von Objekten in String-Form zu konvertieren, um sie zu speichern:

//for simplicity, assume each empty object has card attributes like 'suit', or 'value' 
arrayOfGamecards = [//array of gamecard objects]; 

Und dann, das ich könnte eine Instanz Spiel schaffen hat:

gameCards: '[//array of gamecard objects]' 

Idealerweise möchte ich dieses Array auch "entketten", damit ich mit den Objekten darin arbeiten kann. Ist so etwas mit Ember möglich?

+0

*, um es zu speichern * it Store, wo? Warum möchten Sie dies als String darstellen und nicht als das Array, das es im Grunde ist? –

Antwort

0

Wenn Sie mit Array von Plain Ember.Object dann müssen Sie nicht zu transformieren, können Sie einfach sagen. Das bedeutet, dass EmberData keine Transformation durchführen wird. es wird so wie es ist weitergegeben. also wird dies für Ihre aktuelle Anforderung ausreichen.

Wenn Sie GameCard Klasse haben, und Sie GameCard-Objekt aus dem Server response.then erstellen möchten, müssen Sie benutzerdefinierte Transformationen erstellen. Reference

GameCard.js // Klassendefinition

Ember.Object.extend({  
init(){ 
    this._super(...arguments); 
    //to set the values we sent creating object 
    this.set('prop1',this.get('prop1') || 'defaultvalue'); 
    //like this set all the properties 
} 
}); 

Führen Sie den folgenden Befehl gamecards-content erstellen verwandeln

ember generate transform gamecards-content

app/Transformationen/Gamecards-content.js

import DS from 'ember-data'; 
import GameCard from './../GameCard'; 

export default DS.Transform.extend({ 
    serialize: function(value) { 
    return value; 
    }, 
    deserialize: function(value) { 
    // you can create gamecards object by using the value 
    var gameCards = []; 
    value.forEach((item,index) =>{ 
    gameCards.pushObject(GameCard.create(item)); 
    }); 
    return gameCards; 
    } 
}); 

Game.js

import DS from 'ember-data'; 

export default DS.Model.extend({ 
    gamecards: DS.attr('gamecards-content'); 
}); 
+0

Ich verstehe es nicht. Warum sollte er das Attribut als String speichern und sich darum kümmern, es zu serialisieren und zu deserialisieren, anstatt nur das JS-Objekt als Wert von "GameCards" zu speichern? –

+0

@torazaburo In meinem sehr begrenzten Verständnis von Ember können die Attribute eines Modells nur eine Zeichenfolge, eine Zahl oder ein boolescher Wert sein. DS.attr kann kein Array oder Objekt sein. Wenn ich falsch liege, korrigiere mich bitte. Ich bin hier um zu lernen. –

+0

@ GiancarloManuelGuerraSalvá Das ist absolut falsch. –

Verwandte Themen