当我使用Ember数据的DS.attr(' boolean')时,什么是解决html输入的最佳方法始终是字符串?

时间:2016-04-07 09:14:11

标签: ember.js ember-data

我发现问题是handlebars input设置数据。无论何种类型的数据,最终都将是一个字符串。如果我使用booleandate,则会出现问题。

import DS from 'ember-data';

export default DS.Model.extend({
  ...
  sex: DS.attr('boolean'),
  createdAt: DS.attr('date'),
  updatedAt: DS.attr('date')
});

我使用select来改变性别。 http://balinterdi.com/2015/08/29/how-to-do-a-select-dropdown-in-ember-20.html

<select onchange={{action (mut model.sex) value="model.sex"}}>
  {{#each sexGroup as |sexChoice|}}
    <option value={{sexChoice.value}} selected={{eq model.sex sexChoice.value}}>{{sexChoice.name}}</option>
  {{/each}}
</select>

并在控制器中设置sexGroup:

sexGroup: [
  Ember.Object.create({value: 1, name: "man"}),
  Ember.Object.create({value: 0, name: "woman"})
]

问题在于我选择的男人或女人,Ember数据总是将真实发送到服务器。因为html选择值始终是字符串,而Ember Data attr('boolean')得到的字符串将变为true

如果我必须解决这个问题,我有两种方法:

No.1(不使用boolean,usr string);

No.2(使用parseInt在保存前设置值),如下所示:

this.get('model').set('sex', parseInt(this.get('sexValue')));

date格式也有问题:What is the best way to modify the date format when ember-data does serialization?

所以我不知道Ember数据booleandate属性类型的作用。特别是在使用html输入时,值总是字符串。

所以这种情况有一个很好的解决方案吗?或者我只是使用字符串?感谢。

1 个答案:

答案 0 :(得分:1)

不使用model.sex而是使用getset的计算属性:

sexStr: Ember.computed('model.sex',{
  get(){
    return this.get('model.sex') ? 'male':'female';
  },
  set(key,value){
    this.set('model.sex', value === 'male');
    return value;
  }
})