我的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个问题:
是否可以读取此JSON格式并将其添加到Employee模型中,我理解“结果”应该是“Employees”但我无法控制返回JSON格式,因此如果可以使用“结果”,这将是伟大的。这样做的任何例子都非常感谢。
如何处理“ResultCount”?有没有办法可以将其作为员工模型的一部分阅读?
如何在应用视图中将“有效”视为“有效”/“无效”而不是0或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所需的格式。