emberjs JSON格式处理

时间:2014-02-20 09:03:38

标签: json ember.js

我的emberjs应用程序中有一个Employee模型,我正在尝试使用RESTful Web服务加载Employees内容,该服务采用以下格式:

{
    "Result": [
        {
            "EmployeeId": "1",
            "EmployeeName": "Mark Smith",
            "Active": 0,
            "Dept": "Sales"
        },
        {
            "EmployeeId": "2",
            "EmployeeName": "John Smith",
            "Active": 1,
            "Dept": "Sales"
        },
        {
            "EmployeeId": "3",
            "EmployeeName": "Michael Smith",
            "Active": 1,
            "Dept": "Administration"
        }
    ],
    "ResultCount": 3
}

这里我遇到了3个问题:

  1. 是否可以读取此JSON格式并将其添加到Employee模型中,我理解“结果”应该是“Employees”但我无法控制返回JSON格式,因此如果可以使用“结果”,这将是伟大的。这样做的任何例子都非常感谢。

  2. 如何处理“ResultCount”?有没有办法可以将其作为员工模型的一部分阅读?

  3. 如何在应用视图中将“有效”视为“有效”/“无效”而不是0或1?

  4. 感谢您的时间

1 个答案:

答案 0 :(得分:0)

正如jasonpgignac所指出的,你需要编写一个自定义的serailizer / deserializer来将数据导入到ember-data中。

加载数据后,不需要ResultCount。您应该在返回的集合上使用'length'属性。

作为序列化程序的一部分,您需要在模型中将0/1转换为false / true。您可以添加以下属性:

activeLabel: ( ->
  if @get('active')
    'Active'
  else
    'Not Active'
).property('active')

并在模板中使用此属性。

根据要求,这是我的一个项目的示例类:

App.StudentSerializer = DS.ActiveModelSerializer.extend

  serializeBelongsTo: (record, json, relationship) ->
    key = relationship.key
    if key is 'attendance'
      @serializeAttendance(record, json)
    else
      json["#{key}_id"] = record.get("#{key}.id")

  serializeAttendance: (record, json) ->
    attendance = record.get('attendance')
    json['attendance'] = {}
    ['monday', 'tuesday', 'wednesday', 'thursday', 'friday'].forEach( (day) =>
      json['attendance'][day] = attendance.get(day)
    )

  serializeHasMany: (record, json, relationship) ->
    key = relationship.key

    jsonKey = Ember.String.singularize(key) + '_ids'
    json[jsonKey] = []
    record.get(key).forEach( (item) ->
      json[jsonKey].push(item.get('id'))
    )

我的store.coffee看起来像:

App.Store = DS.Store.extend
  # Override the default adapter with the `DS.ActiveModelAdapter` which
  # is built to work nicely with the ActiveModel::Serializers gem.
  adapter: '_ams'

App.ApplicationSerializer = DS.ActiveModelSerializer.extend()

如果您对后端没有任何控制权,您可能希望使用JsonAdapter并对其进行扩展。正如我在下面所说,我还没有进行反序列化,但是应该有必要的钩子来转换成ember-data所需的格式。