EmberJS模型的动态特性

时间:2016-01-06 04:00:57

标签: ember.js properties model

以下是基本的余烬模型:

App.Person = DS.Model.extend({
  firstName: DS.attr('string'),
  birthday:  DS.attr('date'),
  day1: DS.attr('string'),
  day2: DS.attr('string'),
  day3: DS.attr('string')
});

出于这个例子的目的,如果我的日子达到50天怎么办?而不是一行一行...第4天,第5天,第6天......有没有办法动态循环?我的第一直觉是使用MIXIN,然后将它们推到物体上,但我不认为如果我有计算属性它会起作用:

isHoliday: function(){
    if(this.get('day1') == 'off'){
        return true;
    }
}.property('day1'),

考虑到这个'在那里,我们有回报,我不相信你可以简单地推动'这个到模型上生成这样的东西:

App.Person = DS.Model.extend({
    firstName: DS.attr('string'),
    birthday:  DS.attr('date'),
    day1: DS.attr('string'),
    day2: DS.attr('string'),
    day3: DS.attr('string'),
    isHoliday: function(){
        if(this.get('day1') == 'off'){
            return true;
        }
    }.property('day1')
});

1 个答案:

答案 0 :(得分:2)

这是一种奇怪的方法,但仍有可能:

var defaults = {
    firstName: DS.attr('string'),
    birthday:  DS.attr('date'),
    isHoliday: function(){
        if(this.get('day1') == 'off'){
            return true;
        }
    }.property('day1')
}

var dayProps = {};
var count = 20;
while(count--){
  dayProps['day' + (count + 1)] = DS.attr('string');
}

App.Person = DS.Model.extend(Ember.merge(defaults, dayProps));

使用动态道具进行定义,最好定义Day模型并与Person建立一对多关系:

 App.Person = DS.Model.extend({
  days: DS.hasMany('day') 
 });

 App.Day = DS.Model.extend({
  person: DS.belongsTo('person') 
 });