2013-07-02 1 views
2

RESTAdapter a intégré les types d'attributs string, number, boolean et date. Il existe des relations pour lier d'autres modèles afin de représenter des données complexes.Ember.js Types d'attributs RESTAdapter

Pour représenter array je dois utiliser la transformation ou de l'API de changement de quelque chose comme ceci:

["ember.js", "angular.js", "embergular.js"] 

à:

[ 
    { 
     "id": 1, 
     "ember.js" 
    }, 
    { 
     "id": 2, 
     "angular.js" 
    }, 
    { 
     "id": 3, 
     "embergular.js" 
    } 
] 

Ce qui est un surpuissant petit peu ... Pourquoi il n'y a construit dans les types comme array et object?

Répondre

3

IMO la principale raison pour laquelle il n'y a pas un tel type d'attribut tel que tableau ou objet est principalement par conception.

Pour représenter ensemble je dois utiliser la transformation ou de l'API de changement de quelque chose comme ceci:

mais pour représenter un array sans les besoins de la construction d'une relation avec les modèles que vous pouvez définir une transformation personnalisée (ce vous avez déjà mentionné) qui ne touche vos données. Par exemple, pour utiliser un tableau comme un modèle attribut que vous pourriez faire quelque chose comme ceci:

DS.RESTAdapter.registerTransform('rawData', { 
    deserialize: function(serialized) { 
    return serialized; 
    }, 
    serialize: function(deserialized) { 
    return deserialized; 
    } 
}); 

Définissez ensuite dans votre modèle comme celui-ci:

App.MyModel = DS.Model.extend({ 
    myArray: DS.attr('rawData') 
}); 

De cette façon, l'attribut myArray sera juste ce que votre backend retourné, un tableau ou un objet, etc.

Espérons que ça aide.

+0

Pouvez-vous expliquer pourquoi il n'y a pas d'attributs 'array' et' object'? Une autre chose est quand j'utilise 'rawData' je peux afficher des trucs, mais après éditer et stocker le commit ils n'enverront pas dans le PUT, je vois seulement les attributs intégrés et les modèles liés étant envoyés. –

+0

OK, j'ai fini par réécrire l'API. C'est une bien meilleure approche dans l'ensemble. L'exemple BTW 'rawData' fonctionne bien uniquement lors de l'affichage de données, mais les modifications ne sont pas incluses dans la requête PUT. –