我根据另一个菜单的选定值设置一个菜单的内容。第一个菜单是一组公司。公司有OrderProfile; OrderProfile有一个仓库。因此,基于已知的公司,我需要通过OrderProfile到达仓库。
当我将公司放在company
变量中时,控制台中会发生什么:
company.get('orderProfile.warehouse.name') # Ember-data gets the OrderProfile but not the Warehouse
// => null
var op = company.get('orderProfile')
// => undefined # The OrderProfile assigned to the variable
var warehouse = op.get('warehouse')
// undefined # Now the Warehouse is assigned to the variable
warehouse.get('name')
// => "Warehouse 1" # This was null when we asked for company.orderProfile.warehouse.name
所以我知道我需要在几个步骤中解开这个问题,等待每个步骤完成。这样做是否有Ember成语?
N.B。这是使用:
DEBUG: Ember : 1.5.0-beta.1+canary.13995621 index.js:3496
DEBUG: Ember Data : 1.0.0-beta.7+canary index.js:3496
答案 0 :(得分:0)
以下是我们如何解决这个问题。我怀疑,关键是正确处理承诺,但我们还必须确保我们已经async: true
设置相关关系。
warehouse = company.get("orderProfile.warehouse.name") # Doesn't work
# Instead, we need to treat orderProfile as a promise, and ask for the warehouse
# once it resolves:
company.get("orderProfile").then(
(orderProfile) ->
return orderProfile.get("warehouse") if orderProfile
).then(
(warehouse) =>
# Do something with the warehouse
)
据我所知,关系 - 特别是公司模型中的orderProfile: DS.belongsTo 'orderProfile', async: true
- 需要async: true
来提醒Ember-Data它可能还没有引用的模型,并且需要获取它们。我正在寻找承诺处理的正确轨道,但async: true
部分是真正的关键。