【问题标题】:Representing a list of "tuples" in ember在 ember 中表示“元组”列表
【发布时间】:2013-08-02 12:13:06
【问题描述】:

来自后端的数据具有以下(嵌入)字段(属于“联系人”对象)(json):

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

该格式只是电话号码元素的简单列表,然后是两个元素列表,具有以下两个字段:

  • 字符串:电话类型
  • 字符串:电话号码

我想在我的 ember 应用程序中提供以下可能性:

  • 删除电话号码
  • 添加电话号码,指定电话类型(从下拉列表中选择)和电话号码
  • 删除所有电话号码

如何使用 ember 对象表示phone_numbers,以便轻松实现这两个动作?

我已经开始使用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'),
});

编辑

按照here的解释,我开始定义一个自定义变换:

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 ???
});

【问题讨论】:

    标签: ember.js ember-data


    【解决方案1】:

    做到了:

    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'),
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-27
      • 2012-10-31
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多