假设我有一个游戏模型,每个游戏都有相关的游戏卡。我将有一个这样的模型:
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] 删除。
我来说两句