1

ember, ember-data 1.0, rails, rabl

我有下一个 json 从服务器返回:

    {
     “天”:{
       “身份证”:5,   
       “支出”:[{
           “身份证”:10,
           “费用类型”:{
             "name":"很伤心",
             “身份证”:2
           }
         },
         {...}
       ]
     }
    }

我有下一个 ember 模型:

    Expense.Day = DS.Model.extend
      支出:DS.hasMany('支出')

    Expense.Expenditure = DS.Model.extend
      日:DS.belongsTo('day')
      费用类型:DS.belongsTo('expenseType')

    Expense.ExpenseType = DS.Model.extend
      名称:DS.attr('string')
      支出:DS.hasMany('支出')

我对每个带有 EmbeddedRecordsMixin 的模型使用 ActiveModelSerializer,例如:

    Expense.DaySerializer = Expense.ApplicationSerializer.extend DS.EmbeddedRecordsMixin,
      属性:
        支出:{嵌入:'总是'}

    Expense.ExpenditureSerializer = Expense.ApplicationSerializer.extend DS.EmbeddedRecordsMixin,
      属性:
        费用类型:{嵌入:'总是'}
        天:{嵌入:'总是'}

    Expense.ExpenseTypeSerializer = Expense.ApplicationSerializer.extend DS.EmbeddedRecordsMixin,
      属性:
        支出:{嵌入:'总是'}

它正确加载日期和支出,但不加载费用类型。我使用 console.log 和 super() 注入每个序列化程序的merhod提取物以进行调试,然后看到只有 DaySerializer 执行。我怎么了?我非常接近 Ember 的精神错乱 =(

4

1 回答 1

1

问题在于我对 ember 数据的理解。我查看了 EmbeddedRecordsMixin 源代码,发现只有很多相关性可以嵌入。

只需将费用类型 ID 节点添加到支出项目即可解决问题:

{
 "day":{
   "id":5,   
   "expenditures":[{
       "id":10,
       "expense_type_id": 2
     }, 
     {...}
   ]
 }
}

Ember 处理 /expense_types/2 的 GET 请求并加载模型。就这样!

于 2014-07-13T09:52:12.900 回答