1

バックエンドからのデータには、次の (埋め込み) フィールドがあります (これは「連絡先」オブジェクトに属します) ( json):

"phone_numbers" : [ ["mobile", "43534545354"], ["home", "4356346"] ]

フォーマットは、次の 2 つのフィールドを持つ電話番号要素の単純なリストであり、2 つの要素からなるリストです。

  • 文字列: 電話の種類
  • 文字列: 電話番号

私のemberアプリケーションで次の可能性を提供したいと思います。

  • 電話番号を削除する
  • 電話番号を追加し、電話の種類 (ドロップダウンから選択) と電話番号を指定します
  • すべての電話番号を削除する

phone_numbersこれら 2 つのアクションを簡単に実装するには、どうすれば ember オブジェクトを使用して表現できますか?

を使用して開始しましたDS.attr('raw')が、多くの一般的な機能を実装する必要があると思います (配列から電話を抽出する、電話の種類を抽出する、電話番号を抽出するなど)。より良いアプローチはありますか?これは私の現在のテイクです:

App.Contact = DS.Model.extend({
    title         : DS.attr('string'),
    first_name    : DS.attr('string'),
    surname1      : DS.attr('string'),
    surname2      : DS.attr('string'),
    phone_numbers : DS.attr('raw'),
});

編集

ここの説明に従って、カスタム トランスフォームの定義を開始しました。

DS.RESTAdapter.registerTransform('phoneNumber', {
    serialize: function(value) {
        return [value.get('type'), value.get('number')];
    },
    deserialize: function(value) {
        return Ember.create({ type: value[0], number: value[1] });
    }
});

App.PhoneNumber = DS.Model.extend({
    position: DS.attr('phoneNumber')
});

phoneNumber私が抱えている問題は、この新しい型を使用して次のリストを定義する方法がわからないことですphone_numbers

App.Contact = DS.Model.extend({
    ...
    phone_numbers : list of App.PhoneNumber ???
});
4

1 に答える 1

0

次のようにして取得しました:

DS.RESTAdapter.registerTransform('phoneNumbers', {
    serialize: function(data) {
        var phonenumbers = [], phonenumber;
        for (var i = 0; i < data.length; i++) {
            phonenumber = data[i];
            phonenumbers.push([phonenumber.get('type'), phonenumber.get('number')]);
        }
        return phonenumbers;
    },
    deserialize: function(phonenumbers) {
        var data = Ember.A(), phonenumber;
        for (var i = 0; i < phonenumbers.length; i++) {
            phonenumber = phonenumbers[i];
            data.push(Ember.create({ type: phonenumber[0], number: phonenumber[1] }));
        }
        return data;
    }
});

App.Contact = DS.Model.extend({
    ...
    phone_numbers : DS.attr('phoneNumbers'),
});
于 2013-08-02T14:13:10.787 に答える