Mar*_*tin 20 ember.js ember-data
我正在尝试获取belongsTo ID而不获取实际记录.我的JSON API返回belongsTo关系的ID.
我有以下型号
App.Recipe = DS.Model.extend(
title: DS.attr()
ingredients: DS.hasMany('ingredient', async: true)
)
App.Ingredient = DS.Model.extend(
recipe: DS.belongsTo('recipe')
product: DS.belongsTo('product', async: true)
)
App.Product = DS.Model.extend(
title: DS.attr()
)
Run Code Online (Sandbox Code Playgroud)
这是我的路线:
App.RecipeIndexRoute = Ember.Route.extend(
model: (args) ->
@store.find('recipe', args.recipe_id)
)
Run Code Online (Sandbox Code Playgroud)
这是我的控制器:
我正在尝试在此控制器中找到产品ID.
App.RecipeIndexController = Ember.ObjectController.extend(
hasRecipeInCart: null
actions:
toggleCart: ->
@content.get('ingredients').then((ingredients) =>
# how do I get product id here, without lookup up the product relation?
# this 'get' makes Ember call: /api/v1/products/1
# I simply want the product ID (in this case 1), without having to call the server again.
ingredient.get('product').then((product) =>
product.id # => 1
)
Run Code Online (Sandbox Code Playgroud)
我的JSON看起来像这样:
HTTP GET:/ api/v1/recipes/1
{
"recipe": {
"id":1,
"title":"Recipe 1",
"ingredients":[2,1]
}
}
Run Code Online (Sandbox Code Playgroud)
HTTP GET:/ api/v1/ingredients?ids [] = 2&ids [] = 1
{
"ingredients": [
{
"id":2,
"recipe":1,
"product":1
},
{
"id":1,
"recipe":1,
"product":2
}
]
}
Run Code Online (Sandbox Code Playgroud)
ian*_*zer 13
现在,使用添加到ember数据的ds-reference功能可以更轻松.你现在可以这样做:
var authorId = post.belongsTo("author").id();
Run Code Online (Sandbox Code Playgroud)
见http://emberjs.com/blog/2016/05/03/ember-data-2-5-released.html#toc_code-ds-references-code
大量工作正在重做关系,您可以从数据属性中将其从基础属性中拉出来 model.get('data.product.id')
示例:http://emberjs.jsbin.com/OxIDiVU/16/edit
对于ED 2.x,关系已经过重新设计,并且在获得基础数据之前就ds-references被打破了,直到该功能落地.
要在ED 2.4+中执行此操作,您需要使用新belongsTo方法来处理基础数据.
要获取belongsTo ref的id:
var id = this.get('model').belongsTo('myBelongsToKey').value();
Run Code Online (Sandbox Code Playgroud)