Ember 2.8:“字符串化”对象数组以便将其存储在模型的属性列表中

吉安卡洛·曼努埃尔·瓜拉·萨尔瓦(Giancarlo Manuel GuerraSalvá)

假设我有一个游戏模型,每个游戏都有相关的游戏卡。我将有一个这样的模型:

Game.js

import DS from 'ember-data';

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

在该gamecards属性中,我想以某种方式将对象数组转换为字符串形式以进行存储:

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

然后,我可以创建一个Game实例,该实例具有:

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

理想情况下,我还想对这个数组进行“去字符串化”,以便可以对其内部的对象进行处理。Ember可能会发生这种情况吗?

灰烬怪胎

如果您要处理的是普通数组,Ember.Object则无需创建Transform即可说gamecards: DS.attr()这意味着EmberData将不进行任何转换。它会原样通过。因此这足以满足您当前的需求。

如果您有GameCard课程,并且想从服务器响应中创建GameCard对象,那么您需要创建自定义转换。参考

GameCard.js //类定义

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
 }
});

运行以下命令以创建gamecards-content变换

ember generate transform gamecards-content

app / transforms / 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');
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章