2016-04-07 22 views
0

Bir sorun buluyorum handlebarsinput verileri ayarlayın. Ne tür bir veri olursa olsun, son bir dizgedir. boolean veya date kullanırsam, bir sorun olacaktır.Ember verisinin DS.attr ('boolean') kullandığımda, html giriş verilerinin her zaman dize gönderilmesini sağlamanın en iyi yolu nedir?

import DS from 'ember-data'; 

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

Cinsiyeti değiştirmek için select kullanıyorum. 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> 

Ve denetleyicisi sexGroup ayarlayın:

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

sorundur benim seçme tercihi erkek ya da kadın, Ember veriler her zaman sunucuya gerçek gönderecek neyse. Html select değeri her zaman dize olduğu için ve Ember Data attr('boolean') dize true olur.

ben bu sorunu çözmek istiyorsunuz, iki yönlü vardır: (usr string, boolean kullanmamak)

No.1;

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

date biçimi de sorun var: What is the best way to modify the date format when ember-data does serialization?

Yani Kor verilerinin rolünü bilmiyormuşum gibi

No.2 bak, (Kullanım parseInt Kaydet önce değerini ayarlamak için) boolean ve date öznitelik türleri. Özellikle html girişinin kullanımı ve değeri her zaman dize.

Bu duruma iyi bir çözüm var mı? Yoksa sadece bir ip kullanıyor muyum? Teşekkürler. Bunun yerine get ve set ile hesaplanan özelliği kullanmak model.sex kullanmanın

+0

Kor veri [DS.Transform] teklif (http://emberjs.com/api/data/classes/DS.Transform .html) sınıfı ve size yardımcı olabilecek 'serialize()' ve 'deserialize() yöntemleri. Kendi dönüştürme nesnesini uygulayın, "custom-sex" ve model özelliğinizi şu türde yapın: 'sex: DS.attr ('custom-sex'),' Her zaman istek yanıtı alınacak/gönderilecek, serialize()/deserialize() 'yöntemleriniz çalışır. – Pavol

+0

@Pavol Teşekkürler. Bu sınıfı biliyorum. Ama eğer 'string' kullanırsam bu problemi çözebilirim, neden özel dönüşüm yapmalıyım? – JeskTop

cevap

1

:

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

@Kitler, düzenleme için teşekkürler :) –

+0

'Transform'ı kullan, belki bundan daha iyi. – JeskTop