2013-12-09 8 views
15

मैं वास्तविक रिकॉर्ड प्राप्त किए बिना संबंधित आईडी आईडी लाने की कोशिश कर रहा हूं। मेरा JSON एपीआई संबंधित संबंधों के लिए आईडी लौटाता है।रिकॉर्ड प्राप्त करने के बिना आईडी प्राप्त करें

मैं है निम्नलिखित मॉडल

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() 
) 

यह मेरा मार्ग है:

मैं खोजने की कोशिश कर रहा हूँ:

App.RecipeIndexRoute = Ember.Route.extend(
    model: (args) -> 
    @store.find('recipe', args.recipe_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 
     ) 

मेरे JSON इस तरह दिखता है:

HTTP GET:/API/v1/व्यंजनों/1

{ 
    "recipe": { 
    "id":1, 
    "title":"Recipe 1", 
    "ingredients":[2,1] 
    } 
} 

HTTP GET:/API/v1/सामग्री आईडी [] = 2 & आईडी [] = 1

{ 
    "ingredients": [ 
    { 
     "id":2, 
     "recipe":1, 
     "product":1 
    }, 
    { 
     "id":1, 
     "recipe":1, 
     "product":2 
    } 
    ] 
} 

उत्तर

6

यह अब डी एस-संदर्भ विशेषता यह है कि एंबर डेटा को जोड़ा गया है के साथ बहुत आसान है। अब आप कर सकते हैं:,/API/v1/उत्पादों/1 किसी कारण से:

var authorId = post.belongsTo("author").id(); 

http://emberjs.com/blog/2016/05/03/ember-data-2-5-released.html#toc_code-ds-references-code

6

काम का एक टन फिर से redoing में जा रहा है lationships, आप इसे अंतर्निहित गुण से बाहर खींच सकते हैं से डेटा का श्रेय model.get('data.product.id')

उदाहरण: http://emberjs.jsbin.com/OxIDiVU/16/edit

+0

कि भी सर्वर के लिए एक कॉल से चलाता देखें। मैंने इस कोड का उपयोग किया: @ content.get ('अवयव')। फिर ((सामग्री) => सामग्री .forEach ((घटक, सूचकांक, संख्यात्मक) => productId = ingredient.toJSON()। उत्पाद # यह पंक्ति ट्रिगर्स सर्वर पर कॉल। – Martin

+1

यह ईडी में एक बदसूरत कार्यान्वयन है, मुझे पीआर करने की आवश्यकता हो सकती है या यह पता लगाना चाहिए कि यह जेसन के लिए मॉडल क्यों ला रहा है। – Kingpin2k

+0

उत्पाद आईडी को इस तरह प्राप्त करना संभव है: ingredient.get ('डेटा ') .product.id या ingredient._data.product.id – Martin

5

प्रवर्तन निदेशालय 2.x के लिए, संबंधों पर फिर से काम किया गया है और अंतर्निहित डेटा until the ds-references feature landed प्राप्त करने के लिए टूट गया था।

ईडी 2.4+ में ऐसा करने के लिए, आपको अंतर्निहित डेटा के साथ काम करने के लिए नई belongsTo विधि का उपयोग करने की आवश्यकता है।

एक belongsTo रेफरी के लिए एक आईडी प्राप्त करने के लिए:

var id = this.get('model').belongsTo('myBelongsToKey').value(); 
+1

डीएस-संदर्भों में उतरा है :) http://emberjs.com/blog/2016/05/03/ember-data-2-5-released.html#toc_code-ds-references-code – ianpetzer

संबंधित मुद्दे